ROW_NUMBER (Transact-SQL)

  • 11-09-2017
  • 5 minuten om te lezen
    • j
    • c
    • M
    • m
    • M
    • +8

Is van toepassing op: SQL Server (alle ondersteunde versies) Azure SQL Database Azure SQL Managed Instance Azure Synapse Analytics Parallel Data Warehouse

Nummer de output van een resultaatset. Geeft meer specifiek het volgnummer van een rij binnen een partitie van een resultatenset terug, beginnend bij 1 voor de eerste rij in elke partitie.

Opmerking

ROW_NUMBER is een tijdelijke waarde die wordt berekend wanneer de query wordt uitgevoerd. Zie IDENTITY Property and SEQUENCE om getallen in een tabel vast te houden.

Transact-SQL-syntaxisconventies

Syntaxis

Opmerking

Zie de documentatie van vorige versies om de Transact-SQL-syntaxis voor SQL Server 2014 en eerder te bekijken.

Argumenten

PARTITION BY waarde_expressie
Deelt de resultatenset geproduceerd door de FROM-component in partities waarop de ROW_NUMBER-functie wordt toegepast. waarde_expressie specificeert de kolom waarmee de resultaatset is gepartitioneerd. Als PARTITION BY niet is opgegeven, behandelt de functie alle rijen van de queryresultatenet als een enkele groep. Zie OVER-clausule (Transact-SQL) voor meer informatie.

order_by_clause
De ORDER BY -clausule bepaalt de volgorde waarin de rijen hun unieke ROW_NUMBER binnen een gespecificeerde partitie. Het is verplicht. Voor meer informatie, zie OVER-clausule (Transact-SQL).

Retourtypen

bigint

Algemene opmerkingen

Er is geen garantie dat de rijen die worden geretourneerd door een query met ROW_NUMBER(), bij elke uitvoering exact hetzelfde worden gerangschikt, tenzij aan de volgende voorwaarden wordt voldaan.

  1. Waarden van de gepartitioneerde kolom zijn uniek.

  2. Waarden van de ORDER BY kolommen zijn uniek.

  3. Combinaties van waarden van de partitiekolom en ORDER BY kolommen zijn uniek.

ROW_NUMBER() is niet-deterministisch. Zie Deterministische en niet-deterministische functies voor meer informatie.

Voorbeelden

A. Eenvoudige voorbeelden

De volgende query retourneert de vier systeemtabellen in alfabetische volgorde.

Hier is de resultaatset.

naam recovery_model_desc
master EENVOUDIG
model VOL
msdb EENVOUDIG
tempdb EENVOUDIG

Om een kolom met rijnummers toe te voegen vóór elke rij, voeg een kolom toe met de functie ROW_NUMBER, in dit geval genaamd Row#. U moet de ORDER BY -clausule verplaatsen naar de OVER -clausule.

Hier is de resultaatset.

Rij # name recovery_model_desc
1 master EENVOUDIG
2 model VOLLEDIG
3 msdb EENVOUDIG
4 tempdb EENVOUDIG

Een PARTITION BY -clausule in de recovery_model_desc -kolom, herstart de nummering wanneer de recovery_model_desc -waarde verandert.

Hier is de resultatenset.

Rij # name recovery_model_desc
1 model VOL
1 master EENVOUDIG
2 msdb EENVOUDIG
3 tempdb EENVOUDIG

B. Het rijnummer voor verkopers retourneren

In het volgende voorbeeld wordt een rijnummer berekend voor de verkopers in Adventure Works Cycles op basis van hun verkooprangschikking sinds het begin van het jaar.

Hier is de resultaatset .

C.Een subset rijen retourneren

In het volgende voorbeeld worden de rijnummers berekend voor alle rijen in de SalesOrderHeader -tabel in de volgorde van de OrderDate en retourneert alleen rijen 50 tot en met 60 inclusief.

D. ROW_NUMBER () gebruiken met PARTITION

In het volgende voorbeeld wordt het PARTITION BY -argument gebruikt om het queryresultaat dat is ingesteld door de kolom TerritoryName. De ORDER BY clausule gespecificeerd in de OVER clausule rangschikt de rijen in elke partitie op basis van de kolom SalesYTD. De ORDER BY -clausule in de SELECT -instructie rangschikt het volledige zoekresultaat dat is ingesteld door TerritoryName.

Hier is de resultatenset.

Voorbeelden: Azure Synapse Analytics en Parallel Data Warehouse

E. Het rijnummer retourneren voor verkopers

Het volgende voorbeeld retourneert de ROW_NUMBER voor verkopers op basis van hun toegewezen verkoopquotum.

Hier is een gedeeltelijke resultaatset.

F. ROW_NUMBER () gebruiken met PARTITION

Het volgende voorbeeld toont het gebruik van de ROW_NUMBER functie met het PARTITION BY argument. Dit zorgt ervoor dat de functie ROW_NUMBER de rijen in elke partitie nummert.

Hier is een gedeeltelijke resultaatset.

Zie ook

RANK (Transact-SQL)
DENSE_RANK (Transact-SQL)
NTILE (Transact-SQL)

Geef een reactie

Het e-mailadres wordt niet gepubliceerd. Vereiste velden zijn gemarkeerd met *