ROW_NUMBER (Transact-SQL) (Svenska)

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

  1. Värden av den partitionerade kolumnen är unika.

  2. Värdena för ORDER BY kolumnerna är unika.

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

Lämna ett svar

Din e-postadress kommer inte publiceras. Obligatoriska fält är märkta *