ROW_NUMBER (Transact-SQL) (Norsk)

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

  1. Verdier av den partisjonerte kolonnen er unike.

  2. Verdiene til ORDER BY kolonnene er unike.

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

Legg igjen en kommentar

Din e-postadresse vil ikke bli publisert. Obligatoriske felt er merket med *