1

我的内部查询中的 order by 子句遇到了很大的麻烦。
我使用此查询从数据库中获取分页结果:

;WITH ItemsRank AS
(
select
ROW_NUMBER() OVER(ORDER BY t.CreatedOnDate) AS RowNum, 
t.ItemId
from Tickets t
where t.CompanyId = @CompanyId
group by t.ItemId ...

order by t.CreatedOnDate desc -- this makes me trouble

) ,x as (
select ItemsRank.*, 
c.CommentText ...

WHERE RowNum > @p_From
    AND RowNum <= @p_From + 50
)
select * from x where RowNumComment <= 4


因为查询很大,所以我删除了所有选择、加入、组等。
如果我在查询结束时按顺序排序,它可以工作,但不如预期。
因为查询的第一部分应该按降序获得前 50 个结果。

这是我得到的错误:

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

我究竟做错了什么?
是否可以修复此查询以在查询的第一部分中获取已订购的项目?

4

2 回答 2

3

如错误所示,您不能ORDER BY在 CTE 中使用。

ORDER BY是没有必要的。OVER您在子句中指定顺序。您可以ORDER BY RowNum在最终查询中。

于 2013-01-06T13:12:41.097 回答
1

错误本身会为您提供有关为什么不能使用它的所有信息... :) 正如@flem 所说。试试这个并根据您的需要进行设置。

ROW_NUMBER() OVER(ORDER BY t.CreatedOnDate desc) AS RowNum, 

或者你可以创建CTEwithoutorder by然后使用selectwith order by。阅读更多关于这篇文章

于 2013-01-06T13:22:51.580 回答