iT邦幫忙

第 11 屆 iT 邦幫忙鐵人賽

0

ROW_NUMBER()

ROW_NUMBER()是SQL用來做排序的函數,在做分頁功能時,通常都會使用上它,ROW_NUMBER()會將查詢出來的每一列資料加上一個序號(從1開始累加),依次排序且不會重複。

使用ROW_NUMBER()時必須要用OVER子句選擇對某一列進行排序才能生成序號。

使用方法:

Select ROW_NUMBER() OVER (ORDER BY [欄位名稱] (ASC or DESC) as [ROW_NUMBERㄉ欄位名稱] ,* from [資料表名稱]

使用範例:

Customers資料表

https://ithelp.ithome.com.tw/upload/images/20191007/20119925IQQzLJNLTI.png

使用ROW_NUMBER()

select ROW_NUMBER() OVER (ORDER BY id ASC) as ROW_ID ,* from Customers

顯示結果

https://ithelp.ithome.com.tw/upload/images/20191007/20119925R23fJ8iPQh.png

結果中的ROW_ID欄位,就是由ROW_NUMBER()函式所產生出的欄位序號列。原理是先使用OVER子句中的ORDER BY排序對資料進行排序,然後按照這個順序生成序號,由1開始一直流水編號到最後一筆資料。

分組排序

範例:

select ROW_NUMBER() OVER (PARTITION BY address ORDER BY id ASC) as ROW_ID ,* from Customers

結果:
https://ithelp.ithome.com.tw/upload/images/20191007/20119925MjbyUGOAfd.png

多對address下PARTITION BY條件,會發現ROW_NUMBER()產生的ROW_ID欄位,會依照組別來產生流水號。

要取出每個群組的第一筆資料,就可以使用這個方法,如下:

select * from (select ROW_NUMBER() OVER (PARTITION BY address ORDER BY id ASC) as ROW_ID ,* from Customers)as KKK where KKK.ROW_ID =1 

結果:

https://ithelp.ithome.com.tw/upload/images/20191007/20119925OaKFjcXdC0.png


上一篇
[iT鐵人賽Day33] SQL Server 暫存表(@ # ##)與CTE (Common Table Expressions)
下一篇
[iT鐵人賽Day35]ASP.NET-使用者控制項-分頁的用法
系列文
淺談資料庫&ASP.net&C# 入門36

尚未有邦友留言

立即登入留言