ROW_NUMBER (Transact-SQL) (Dansk)

  • 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.

  1. Værdier af den partitionerede kolonne er unikke.

  2. Værdierne for ORDER BY kolonnerne er unikke.

  3. 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)

Skriv et svar

Din e-mailadresse vil ikke blive publiceret. Krævede felter er markeret med *