一.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.n<2
執行結果: