抛出和错误“ORDER BY子句在视图,内联函数,派生表,子查询和公用表表达式中无效,除非还指定了TOP或FOR XML”。 当我使用前100%时,抛出不同的错误,就像多次使用的coloumn一样
答案 0 :(得分:1)
查询缺少从CTE中选择数据,因此我们现在无法查看所有查询,但错误很明显。订购CTE无效,因为它输出的订单可以通过使用CTE本身的select查询重新排序。
考虑:
WITH foo as (
SELECT id,name FROM bar ORDER BY id ASC
)
SELECT * FROM foo ORDER BY name DESC
CTE内订单的含义或目的是什么?如果查询引擎服从它,它将无意地执行多余的排序工作。
您执行排序作为最后一步 - 作为中间步骤排序仅在TOP关键字的场景中有意义,您只需要基于订单的数据子集。
答案 1 :(得分:0)
您不理解错误消息的哪一部分? ORDER BY
应仅位于最外层的查询中。
SQL表和结果集表示无序集。子查询和CTE也是如此。一个例外是最外层查询中允许ORDER BY
对结果集进行排序。
WITH ord_dupes AS (
SELECT ROW_NUMBER() OVER (PARTITION BY bas2."BudgetTask__c", bas2."BudgetResource__c"
ORDER BY bas2."LastModifiedDate" DESC
) as rk,
bas2.*, bas2dupes.* -- should list out the columns
FROM bas2 INNER JOIN
bas2dupes
ON bas2."BudgetTask__c" = bas2dupes."BudgetTask__c" AND
bas2."BudgetResource__c" = bas2dupes."BudgetResource__c"
)
SELECT od.*
FROM ord_dupes od
ORDER BY ? DESC ;
您的ORDER BY
列为"BudgetTask__r.BudgetHeader__r.Project__r.ProjectNumber__c"
。如果这是列的名称,则使用它。但是,如果是这样,我强烈建议您修复数据模型,这样就不会在列名中使用句点。
否则,只需为?
添加正确的列。