3

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

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

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

我得到

未找到预期的词法元素:)
解析表格时出现问题
FROM 关键字后的名称
选择语句。

删除 ORDER BY 后一切正常。虽然,我在帮助中找到了示例,但它看起来像我的查询(确实更复杂):

SELECT * FROM (SELECT TOP 10 empid, fullname FROM branch1 ORDER BY empid) a UNION SELECT empid, fullname FROM branch2 ORDER BY empid

2) ORDER BY+ ROWNUM()。我在上面的示例中使用了嵌套查询来计算有序行。有没有机会避免嵌套查询?在 SQL Server 中,我可以执行以下操作:

SELECT Name, Value, ROW_NUMBER() OVER(ORDER BY Value) FROM MainTable WHERE Value > 1 ORDER BY Value

请指教。谢谢。

4

2 回答 2

5

我认为您需要将 ORDER BY 移到子查询之外:

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

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

于 2010-04-26T12:36:04.640 回答
0

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

而不是:

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

采用

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

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

于 2010-04-26T12:16:11.383 回答