- 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.
-
Waarden van de gepartitioneerde kolom zijn uniek.
-
Waarden van de
ORDER BY
kolommen zijn uniek. -
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)