SQL Server 查询错误 -ORDER BY 子句在视图中无效

Posted

技术标签:

【中文标题】SQL Server 查询错误 -ORDER BY 子句在视图中无效【英文标题】:SQL Server Query Error -ORDER BY clause is invalid in views 【发布时间】:2016-04-18 14:55:21 【问题描述】:

我正在运行以下代码。当我运行此代码时,我收到错误消息:

ORDER BY 子句在视图、内联函数、派生中无效 表、子查询和公用表表达式,除非 TOP 或 FOR 还指定了 XML。

我不确定为什么会收到此错误消息。非常感谢您的帮助。

SELECT  a.DELINQ_BUCKET_GROUP, a.vv_count
FROM 
(   
    SELECT  DELINQ_BUCKET_GROUP, 
            CASE WHEN DELINQ_BUCKET_GROUP IS NULL THEN 
                    SUM(CASE WHEN DELINQ_BUCKET_GROUP IS NULL THEN 1 ELSE 0 END)
                ELSE COUNT(DELINQ_BUCKET_GROUP) 
            END AS vv_count 
    FROM    DCSReporting.dbo.DIM_DELINQUENT_BUCKET
    GROUP BY DELINQ_BUCKET_GROUP
    ORDER BY vv_count DESC
) a
WHERE rownum<=100

【问题讨论】:

错误信息很清楚;您不能在子查询中使用order by。此外,没有必要使用它,子查询只是一个集合。为什么要对中间集进行排序?你想订购你的结果集。 rownum 是一个 oracle 功能。你确定你使用的是 SQL Server 吗? 您可能遇到的下一个错误(无效的列名 rownum)是因为您的派生表中没有名为 rownum 的列。 除非您尝试在按 vv_count 排序的前 100 条记录上创建派生表???在这种情况下,您需要在 SELECTDELINQ_BUCKET_GROUP 之间添加一个 TOP (100) 运算符... Order BY is not supported in view in sql server的可能重复 【参考方案1】:

如果您使用SQL Server 2012或更高版本,请在Order By之后使用Offset 0 Rows

SELECT Id,
       Name       
FROM Table

ORDER BY Id 
OFFSET 0 ROWS

希望这会有所帮助。

【讨论】:

以上是关于SQL Server 查询错误 -ORDER BY 子句在视图中无效的主要内容,如果未能解决你的问题,请参考以下文章

更新 SQL Server 中 GROUP BY sum() 函数的查询问题 [关闭]

具有 group by 和/或 distinct 和 pivot 的复杂 SQL Server 查询

SQL Server 诊断查询-

如何在没有附加查询的情况下在 SQL Server 中连接没有子查询的 GROUP BY 子句中的字符串?

SQL server PARTITION BY 是啥意思

sqlserver2008,sql编程,group by 用法