sql使用row_number()查詢標記行號


背景:  

  在分頁功能中,記錄需分頁顯示,需要row_number()函數標記行號。

數據表:

排序之前數據表顯示:

sql語句:

1 select ROW_NUMBER() over(order by id) as RowNum,Name,Val from T1

檢索結果:

注意:Leslie的ID為Null,經過排序之后,rows卻升為了首位。

 

常見錯誤:列名RowNum失效。

解釋:在sql中熱名稱(即剛定的名稱RowNum)不能馬上使用,需要包一層查詢。
比如說:實現分頁顯示,只想查詢1-5行的結果,sql語句如下:

1 select ROW_NUMBER() over(order by id) as rows,Name,Val from T1 where rows between 1 and 5

解決方案:

1 select * from
2 (select ROW_NUMBER() over(order by id) as rows,Name,Val from T1) U
3 where rows between 1 and 5;

也就是:

1 with A as
2 (
3 select ROW_NUMBER() over(order by id) as rows,Name,Val from T1
4 )
5 select * from A where A.rows between 1 and 5;

檢索結果:

參考資料:熱名稱


 

在某些情況下,我們希望指定RowNum的排序方式,比如把熱門城市(如北京、上海等)排在靠前的位置。

這時需要組合case...when...then的方式來使用Row_Number()函數。sql語句如下:

1 select ROW_NUMBER() over(
2 order by
3 case  Name 
4 when 'Leslie' then 1
5 when 'Lily' then 2
6 else 3 end asc)as RowNum,Name,Val from T1

檢索結果如下:

 


免責聲明!

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



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