背景: 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
檢索結果以下: