SQLSERVER如何在子查詢中使用ORDER BY


今天在使用公司的一個pager接口的時候,需要傳遞一個查詢的SQL語句,因為我希望他能夠在pager對他查詢出來的結果排序之前自己先進行排序,

於是在這個SQL中添加了ORDER BY,但是得到的結果是這么個異常:

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

這個異常信息已經說的很清楚了,要解決這個問題只能指定TOP,可是這個變態的接口需要的是沒有TOP條數的SQL,怎么辦呢?

當時想啊,思路有兩個: 

1.查詢的時候加一個ROW_NUMBER,這樣就能達到查詢出的結果是按自己的意願排序的啦。

  事實證明這樣是可行的,需要的語句是這樣的:select ROW_NUMBER() over(order by name) as rn,* from Movie;

2.還是添加TOP,但是要TOP所有的記錄條數。

  這個有個難點,怎么獲得所有的記錄條數呢?

  在查閱資料的時候發現了一個寫了這么寫年的SQL卻從來沒用過,也沒聽人提起過,學習SQL時也未曾發現的好東東啊

  TOP 100 PERCENT

  當然也可以是其他的百分比,不過這個100 PERCENT, 正好解決了我的問題。

  於是我的SQL可以是這樣的:select top 100 percent * from Movie order by name;

 

總結:這樣就有兩個知識點了

   1.子查詢中不能有ORDER BY, 除非指定了TOP;

   2.TOP后面可以跟百分比,如:TOP 35 PERCENT;

  

 轉載注明出處:http://www.cnblogs.com/wancy86/archive/2013/05/27/TOP100PERCENT.html


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM