- 09/11/2017
- 5 minutter å lese
-
- j
- c
- M
- m
- M
-
+8
Gjelder: SQL Server (alle støttede versjoner) Azure SQL Database Azure SQL Managed Instance Azure Synapse Analytics Parallell datalager
Nummererer utdataene til et resultatsett. Mer spesifikt, returnerer det løpende nummeret på en rad i en partisjon av et resultatsett, og begynner med 1 for den første raden i hver partisjon.
Merk
ROW_NUMBER
er en midlertidig verdi beregnet når spørringen kjøres. For å fastholde tall i en tabell, se IDENTITY-egenskap og SEKVENS.
Transact-SQL-syntakskonvensjoner
Syntaks
Merk
For å se Transact-SQL-syntaks for SQL Server 2014 og tidligere, se dokumentasjon for tidligere versjoner.
Argumenter
PARTITION BY value_expression
Deler resultatsettet produsert av FROM-setningen i partisjoner som ROW_NUMBER-funksjonen brukes på. value_expression spesifiserer kolonnen som resultatsettet partisjoneres med. Hvis PARTITION BY
ikke er spesifisert, behandles funksjonen alle radene i søkeresultatet som er satt som en enkelt gruppe. For mer informasjon, se OVER-klausul (Transact-SQL).
order_by_clause
ORDER BY
-satsen bestemmer sekvensen som radene tildeles til deres unike ROW_NUMBER
i en spesifisert partisjon. Det kreves. For mer informasjon, se OVER-klausul (Transact-SQL).
Returtyper
bigint
Generelle merknader
Det er ingen garanti at radene som returneres av et spørsmål som bruker ROW_NUMBER()
, blir bestilt nøyaktig likt med hver utførelse med mindre følgende betingelser er oppfylt.
-
Verdier av den partisjonerte kolonnen er unike.
-
Verdiene til
ORDER BY
kolonnene er unike. -
Verdikombinasjoner av partisjonskolonnen og
ORDER BY
kolonnene er unike.
ROW_NUMBER()
er ikke-bestemt. For mer informasjon, se Deterministiske og ikke-deterministiske funksjoner.
Eksempler
A. Enkle eksempler
Følgende spørsmål returnerer de fire systemtabellene i alfabetisk rekkefølge.
Her er resultatsettet.
navn | recovery_model_desc |
---|---|
master | ENKEL |
modell | FULL |
msdb | ENKEL |
tempdb | ENKEL |
Slik legger du til en radnummerkolonne foran hver rad, legg til en kolonne med ROW_NUMBER
-funksjonen, i dette tilfellet kalt Row#
. Du må flytte ORDER BY
klausulen opp til OVER
klausulen.
Her er resultatsettet.
Rad # | name | recovery_model_desc |
---|---|---|
1 | master | ENKEL |
2 | modell | FULL |
3 | msdb | ENKEL |
4 | tempdb | SIMPLE |
Legge til en PARTITION BY
ledd i recovery_model_desc
kolonnen, starter nummereringen på nytt når recovery_model_desc
verdien endres.
Her er resultatsettet.
Rad # | name | recovery_model_desc |
---|---|---|
1 | modell | FULL |
1 | master | ENKEL |
2 | msdb | ENKEL |
3 | tempdb | ENKEL |
B. Returnerer radnummeret for selgere
Følgende eksempel beregner et radnummer for selgerne i Adventure Works Cycles basert på deres årlige salgsrangering.
Her er resultatsettet .
C.Returnere et delsett av rader
Følgende eksempel beregner radnumre for alle rader i SalesOrderHeader
tabellen i rekkefølgen av OrderDate
og returnerer bare rader 50
til 60
inkludert.
D. Bruke ROW_NUMBER () med PARTITION
Følgende eksempel bruker argumentet PARTITION BY
for å partisjonere søkeresultatet satt av kolonnen TerritoryName
. ORDER BY
klausul spesifisert i OVER
klausul bestiller radene i hver partisjon etter kolonnen SalesYTD
. ORDER BY
-klausulen i SELECT
uttalelsen bestiller hele søkeresultatet satt av TerritoryName
.
Her er resultatsettet.
Eksempler: Azure Synapse Analytics og Parallel Data Warehouse
E. Returnerer radnummeret for selgere
Følgende eksempel returnerer ROW_NUMBER
for salgsrepresentanter basert på deres tildelte salgskvote.
Her er en delresultatsett.
F. Bruke ROW_NUMBER () med PARTITION
Eksemplet nedenfor viser bruk av ROW_NUMBER
-funksjonen med PARTITION BY
-argumentet. Dette fører til at ROW_NUMBER
-funksjonen nummererer radene i hver partisjon.
Her er et delvis resultatsett.
Se også
RANK (Transact-SQL)
DENSE_RANK (Transact-SQL)
NTILE (Transact-SQL)