- 09/11/2017
- 5 minutter at læse
-
- j
- c
- M
- m
- M
-
+8
Gælder for: SQL Server (alle understøttede versioner) Azure SQL Database Azure SQL Managed Instance Azure Synapse Analytics Parallelt datalager
Nummererer output for et resultatsæt. Mere specifikt returnerer det sekventielle nummer på en række inden for en partition af et resultatsæt, der starter ved 1 for den første række i hver partition.
Bemærk
ROW_NUMBER
er en midlertidig værdi beregnet, når forespørgslen køres. For at fastholde tal i en tabel, se IDENTITY-egenskab og SEKVENS.
Transact-SQL-syntakskonventioner
Syntaks
Bemærk
Hvis du vil se Transact-SQL-syntaks til SQL Server 2014 og tidligere, se dokumentation til tidligere versioner.
Argumenter
PARTITION BY value_expression
Opdeler resultatsættet produceret af FROM-klausulen i partitioner, som ROW_NUMBER-funktionen anvendes. value_expression specificerer den kolonne, hvormed resultatsættet partitioneres. Hvis PARTITION BY
ikke er angivet, behandler funktionen alle rækker i forespørgselsresultatet som en enkelt gruppe. For mere information, se OVER-klausul (Transact-SQL).
order_by_clause
ORDER BY
-bestemmelsen bestemmer rækkefølgen, hvor rækkerne får deres unikke ROW_NUMBER
inden for en bestemt partition. Det er påkrævet. For mere information, se OVER-klausul (Transact-SQL).
Returtyper
bigint
Generelle bemærkninger
Der er ingen garanti at rækkerne, der returneres af en forespørgsel ved hjælp af ROW_NUMBER()
, bestilles nøjagtigt det samme med hver udførelse, medmindre følgende betingelser er sande.
-
Værdier af den partitionerede kolonne er unikke.
-
Værdierne for
ORDER BY
kolonnerne er unikke. -
Kombinationer af værdier i partitionskolonnen og
ORDER BY
kolonner er unikke.
ROW_NUMBER()
er ikke-deterministisk. For mere information, se Deterministiske og ikke-deterministiske funktioner.
Eksempler
A. Enkle eksempler
Den følgende forespørgsel returnerer de fire systemtabeller i alfabetisk rækkefølge.
Her er resultatsættet.
navn | recovery_model_desc |
---|---|
master | SIMPLE |
model | FULD |
msdb | ENKEL |
tempdb | SIMPLE |
Sådan tilføjes en række med en kolonne foran hver række tilføj en kolonne med funktionen ROW_NUMBER
, i dette tilfælde kaldet Row#
. Du skal flytte ORDER BY
-klausulen op til OVER
-klausulen.
Her er resultatsættet.
Række # | navn | recovery_model_desc |
---|---|---|
1 | master | SIMPEL |
2 | model | FULD |
3 | msdb | ENKEL |
4 | tempdb | SIMPLE |
Tilføjelse af en PARTITION BY
-klausul i recovery_model_desc
-kolonnen genstarter nummereringen, når recovery_model_desc
-værdien ændres.
Her er resultatsættet.
Række # | navn | recovery_model_desc |
---|---|---|
1 | model | FULD |
1 | master | ENKEL |
2 | msdb | ENKEL |
3 | tempdb | SIMPEL |
B. Returnering af række nummer for sælgere
Følgende eksempel beregner et række nummer for sælgere i Adventure Works Cycles baseret på deres årlige salgsrangering.
Her er resultatsættet .
C.Returnering af et undersæt af rækker
Følgende eksempel beregner rækkenumre for alle rækker i SalesOrderHeader
-tabellen i rækkefølgen af OrderDate
og returnerer kun rækker 50
til 60
inklusive.
D. Brug af ROW_NUMBER () med PARTITION
Følgende eksempel bruger argumentet PARTITION BY
til at opdele forespørgselsresultatet indstillet af kolonnen TerritoryName
. ORDER BY
-klausulen, der er specificeret i OVER
-klausulen ordner rækkerne i hver partition efter kolonnen SalesYTD
. ORDER BY
-sætningen i SELECT
sætningen bestiller hele forespørgselsresultatet indstillet med TerritoryName
.
Her er resultatsættet.
Eksempler: Azure Synapse Analytics og Parallel Data Warehouse
E. Returnering af række nummer for sælgere
Følgende eksempel returnerer ROW_NUMBER
for salgsrepræsentanter baseret på deres tildelte salgskvote.
Her er en delresultatsæt.
F. Brug af ROW_NUMBER () med PARTITION
Følgende eksempel viser brug af ROW_NUMBER
-funktionen med PARTITION BY
-argumentet. Dette får funktionen ROW_NUMBER
til at nummerere rækkerne i hver partition.
Her er et delresultatsæt.
Se også
RANK (Transact-SQL)
DENSE_RANK (Transact-SQL)
NTILE (Transact-SQL)