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

背景:  sql

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

數據表:.net

排序以前數據表顯示:blog

sql語句:排序

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

檢索結果:get

注意:Leslie的ID爲Null,通過排序以後,rows卻升爲了首位。it

 

常見錯誤:列名RowNum失效。select

解釋:在sql中熱名稱(即剛定的名稱RowNum)不能立刻使用,須要包一層查詢。
好比說:實現分頁顯示,只想查詢1-5行的結果,sql語句以下: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

檢索結果以下:

相關文章
相關標籤/搜索