2013-01-06 52 views
1

我在內部查詢中使用order by子句遇到很大麻煩。
我用這個查詢從數據庫中獲得分頁結果:如何在內部查詢中使用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 


因爲查詢是大我刪除了所有選擇,joing,團體等
如果我在年底把ORDER BY查詢它的工作原理,但不是預期的。
因爲查詢的第一部分應該按降序排列前50個結果。

這是錯誤,我得到:

ORDER BY子句在視圖,內聯函數無效,派生 表,子查詢和公用表表達式,除非TOP或FOR 還指定XML

我在做什麼錯?
是否可以修復此查詢以獲取查詢的第一部分中的訂購商品?

+0

你應該開始把分號放在statemet的末尾:http://sqlserverplanet.com/tsql/why-i-will-begin-using-semicolons-to-terminate-sql-statements –

回答

3

如錯誤所示,您不能在CTE中使用ORDER BY

ORDER BY是沒有必要的。您可以在OVER子句中指定訂單。您可以在最終查詢中輸入ORDER BY RowNum

+0

謝謝。我沒有看到我錯過'OVER'條款中的'desc'。 – 1110

1

錯誤本身會給你所有關於它爲什麼不能被使用的信息...... :)正如@flem所說的。試試這個,並設置你想要的順序。

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

否則您可以創建CTE沒有order by然後用selectorder by。 瞭解更多關於this article