- 09/11/2017
- 5 minuter att läsa
-
- j
- c
- M
- m
- M
-
+8
Gäller för: SQL Server (alla versioner som stöds) Azure SQL-databas Azure SQL-hanterad instans Azure Synapse Analytics Parallellt datalager
Numrerar resultatet för en resultatuppsättning. Mer specifikt, returnerar det sekventiella numret på en rad inom en partition av en resultatuppsättning och börjar med 1 för den första raden i varje partition.
Obs
ROW_NUMBER
är ett tillfälligt värde som beräknas när frågan körs. För att bestå siffror i en tabell, se IDENTITY-egenskap och SEKVENS.
Transact-SQL-syntaxkonventioner
Syntax
Obs
Om du vill visa Transact-SQL-syntax för SQL Server 2014 och tidigare, se dokumentationen för tidigare versioner.
Argument
PARTITION BY value_expression
Delar resultatmängden som produceras av FROM-satsen i partitioner som funktionen ROW_NUMBER tillämpas på. value_expression anger kolumnen med vilken resultatuppsättningen är partitionerad. Om PARTITION BY
inte anges, behandlar funktionen alla rader i frågeresultatet som en enda grupp. Mer information finns i OVER-klausulen (Transact-SQL).
order_by_clause
ORDER BY
-satsen bestämmer sekvensen i vilken raderna tilldelas sin unika ROW_NUMBER
inom en angiven partition. Det är ett krav. Mer information finns i OVER-klausulen (Transact-SQL).
Returtyper
bigint
Allmänna anmärkningar
Det finns ingen garanti att raderna som returneras av en fråga med ROW_NUMBER()
kommer att beställas exakt samma för varje körning såvida inte följande villkor är uppfyllda.
-
Värden av den partitionerade kolumnen är unika.
-
Värdena för
ORDER BY
kolumnerna är unika. -
Kombinationer av värden i partitionskolumnen och
ORDER BY
kolumner är unika.
ROW_NUMBER()
är icke-bestämd. För mer information, se Deterministiska och icke-deterministiska funktioner.
Exempel
A. Enkla exempel
Följande fråga returnerar de fyra systemtabellerna i alfabetisk ordning.
Här är resultatuppsättningen.
namn | recovery_model_desc |
---|---|
master | ENKEL |
modell | FULL |
msdb | ENKEL |
tempdb | ENKEL |
För att lägga till en radnummerkolumn framför varje rad, lägg till en kolumn med ROW_NUMBER
-funktionen, i det här fallet med namnet Row#
. Du måste flytta ORDER BY
-satsen till OVER
-satsen.
Här är resultatuppsättningen.
Rad # | namn | recovery_model_desc |
---|---|---|
1 | master | ENKEL |
2 | modell | FULL |
3 | msdb | ENKEL |
4 | tempdb | SIMPLE |
Lägga till en PARTITION BY
-satsen i kolumnen recovery_model_desc
startar om numreringen när recovery_model_desc
-värdet ändras.
Här är resultatuppsättningen.
Rad # | namn | recovery_model_desc |
---|---|---|
1 | modell | FULL |
1 | master | ENKEL |
2 | msdb | ENKEL |
3 | tempdb | SIMPEL |
B. Returnerar radnumret för säljare
Följande exempel beräknar ett radnummer för säljare i Adventure Works Cycles baserat på deras årliga försäljningsrankning.
Här är resultatuppsättningen .
C.Returnera en delmängd av rader
Följande exempel beräknar radnummer för alla rader i SalesOrderHeader
tabellen i ordningen efter OrderDate
och returnerar endast rader 50
till 60
inklusive.
D. Använda ROW_NUMBER () med PARTITION
Följande exempel använder argumentet PARTITION BY
för att partitionera frågeresultatet inställt av kolumnen TerritoryName
. ORDER BY
-klausulen som anges i OVER
-klausulen ordnar raderna i varje partition med kolumnen SalesYTD
. ORDER BY
-satsen i SELECT
uttalandet beställer hela frågeresultatet inställt av TerritoryName
.
Här är resultatuppsättningen.
Exempel: Azure Synapse Analytics och Parallel Data Warehouse
E. Returnerar radnumret för säljare
Följande exempel returnerar ROW_NUMBER
för säljare baserat på deras tilldelade försäljningskvot.
Här är en partiell resultatuppsättning.
F. Använda ROW_NUMBER () med PARTITION
Följande exempel visar hur ROW_NUMBER
-funktionen används med argumentet PARTITION BY
. Detta gör att ROW_NUMBER
-funktionen numrerar raderna i varje partition.
Här är en partiell resultatuppsättning.
Se även
RANK (Transact-SQL)
DENSE_RANK (Transact-SQL)
NTILE (Transact-SQL)