一.SQL Server Row_number函數簡介
ROW_NUMBER()是一個Window函數,它為結果集的分區中的每一行分配一個連續的整數。 行號以每個分區中第一行的行號開頭。
以下是ROW_NUMBER()函數的語法實例:
select *,row_number() over(partition by column1 order by column2) as n from tablename
在上面語法中:
- PARTITION BY子句將結果集劃分為分區。 ROW_NUMBER()函數分別應用于每個分區,并重新初始化每個分區的行號。
- PARTITION BY子句是可選的。如果未指定,ROW_NUMBER()函數會將整個結果集視為單個分區。
- ORDER BY子句定義結果集的每個分區中的行的邏輯順序。 ORDER BY子句是必需的,因為ROW_NUMBER()函數對順序敏感。
二.Row_number函數的具體用法
1.使用row_number()函數對結果集進行編號,如:
select ROW_NUMBER() over(order by recordid ) as 編號,* from [dbo].[Basal_Anormal_Solution]
運行結果:
2.對結果集按照指定列進行分組,并在組內按照指定列排序(如:把班級的總分按照小組進行分組顯示,分組后在組內進行從高分到低分的排序)
select *,row_number() over(partition by createby order by actionOpeid) as n from [dbo].[Basal_Anormal_Solution]
運行結果:

3.對結果集按照指定列去重(如:對學生成績按小組進行分組顯示,結果集中只顯示每組中一位最高分的學生)
select a.* from (select *,row_number() over(partition by createby order by actionOpeid)
as n from [dbo].[Basal_Anormal_Solution])as a where a.n2
運行結果:
注意:當我們求的是第一名成績的時候,不能用row_number(),因為如果同班有兩個并列第一,row_number()只返回一個結果。這個時候就要用到另外一個函數,rank()和dense_rank();rank()和dense_rank()區別:rank()是跳躍排序,有兩個第二名時接下來就是第四名。這個時候我們通常會選擇用rank()函數,靈活應用。
總結
到此這篇關于SQL Server中row_number函數常見用法的文章就介紹到這了,更多相關SQL Server row_number函數用法內容請搜索腳本之家以前的文章或繼續瀏覽下面的相關文章希望大家以后多多支持腳本之家!
您可能感興趣的文章:- MYSQL row_number()與over()函數用法詳解
- PostgreSQL ROW_NUMBER() OVER()的用法說明
- postgreSQL中的row_number() 與distinct用法說明
- postgresql rank() over, dense_rank(), row_number()用法區別
- MySQL中row_number的實現過程
- sql四大排名函數之ROW_NUMBER、RANK、DENSE_RANK、NTILE使用介紹
- sql ROW_NUMBER()與OVER()方法案例詳解