背景:
在分頁功能中,記錄需分頁顯示,需要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
檢索結果如下: