我的内部查询中的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
我做错了什么?
是否可以修复此查询以在查询的第一部分中获取有序项目?
答案 0 :(得分:3)
如错误所示,您无法在CTE中使用ORDER BY
。
没有必要ORDER BY
。您可以在OVER
子句中指定顺序。您可以在最终查询中ORDER BY RowNum
。
答案 1 :(得分:1)
错误本身会为您提供有关无法使用的所有信息... :)正如@flem所说。尝试这个并按照您的要求设置。
ROW_NUMBER() OVER(ORDER BY t.CreatedOnDate desc) AS RowNum,
否则,您可以创建CTE
而不order by
,然后使用select
order by
。
详细了解this article。