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 条记录上创建派生表???在这种情况下,您需要在 SELECT
和 DELINQ_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 查询