Select Advantage数据库服务器按行为排序

Select Advantage数据库服务器按行为排序,select,sql-order-by,advantage-database-server,Select,Sql Order By,Advantage Database Server,我正在使用ADSV10测试版。我正在尝试计算有序结果集 嵌套查询中的1 ORDER BY。我需要使用嵌套选择进行一些计算: SELECT Name, Value, ROWNUM() FROM (SELECT * FROM MainTable WHERE Value > 0 ORDER BY Value) a 我越来越 Expected lexical element not found: ) There was a problem parsing the table names afte

我正在使用ADSV10测试版。我正在尝试计算有序结果集

嵌套查询中的1 ORDER BY。我需要使用嵌套选择进行一些计算:

SELECT Name, Value, ROWNUM() FROM (SELECT * FROM MainTable WHERE Value > 0 ORDER BY Value) a
我越来越

Expected lexical element not found: ) There was a problem parsing the table names after the FROM keyword in your SELECT statement. 2按+行数排序。我使用上面示例中的嵌套查询来计算有序行。是否有可能避免嵌套查询? 在SQL Server中,我可以执行以下操作:

SELECT Name, Value, ROW_NUMBER() OVER(ORDER BY Value) FROM MainTable WHERE Value > 1 ORDER BY Value
请给我一些建议。
谢谢。

在你的陈述中使用别名,以使其更清楚,并可能解决问题

而不是:

SELECT Name, Value, ROWNUM() 
FROM (SELECT * FROM MainTable WHERE Value > 0 ORDER BY Value) a
使用


问题可能是它混淆了order by子句中的字段值-它不知道从哪个表获取它,第一个表还是第二个表。

我认为您需要将order从子查询之外移动:

SELECT Name, Value, ROWNUM() FROM 
  (SELECT * FROM MainTable WHERE Value > 0 ) a ORDER BY Value
如果您希望将rownum应用于有序结果集,那么今天早上我的速度有点慢,可能需要使用以下内容:

SELECT Name, Value, ROWNUM() FROM 
  (SELECT top 100 PERCENT * FROM MainTable WHERE Value > 0 order by value ) a

我认为子查询中的ORDERBY是不允许的,除非它实际上改变了结果。。。然而,在这种情况下,它似乎确实应该被允许。

1st还是2nd?为什么?我只用了一张桌子。自从我回答你的问题以来,你的问题似乎发生了巨大的变化。但在原始查询中,“a”是一组记录,而maintable是另一组记录。对不起,我不知道您在说什么。您的建议可以简化为从maintable中选择名称、值、ROWNUM,其中值>0按值排序,不是吗?在问题的第二部分,我写了为什么它不起作用。@ie:是的,它相当于那个查询。但是,我认为第二个查询不支持OVER子句。@马克·威尔金斯:至于TOP 100%,你不认为这样的要求看起来像个bug吗?我的意思是,我希望以任何方式看到所有100%的记录。@ie:我同意在这种情况下,顶级用法是非常人为的。你能澄清一下在这种情况下你想用ROWNUM做什么吗?它需要应用于有序结果集吗?@Mark Wilkins:这是一个非常特殊的情况,我需要将有序记录集拆分为两个-一个是奇数rownum,另一个是偶数rownum。然后我需要用它们做一些计算。为了简化这个过程,假设我需要对有序记录集中的第1条和第2条记录、第3条和第4条记录等执行操作。使用rownum并不是唯一的方法,但我尝试了这个方法。谢谢
SELECT Name, Value, ROWNUM() FROM 
  (SELECT * FROM MainTable WHERE Value > 0 ) a ORDER BY Value
SELECT Name, Value, ROWNUM() FROM 
  (SELECT top 100 PERCENT * FROM MainTable WHERE Value > 0 order by value ) a