- 09/11/2017
- 5 minute de citit
-
- j
- c
- M
- m
- M
-
+8
Se aplică la: SQL Server (toate versiunile acceptate) Azure SQL Database Azure SQL Managed Instance Azure Synapse Analytics Depozit de date paralele
Numerotează ieșirea unui set de rezultate. Mai precis, returnează numărul secvențial al unui rând dintr-o partiție a unui set de rezultate, începând de la 1 pentru primul rând din fiecare partiție.
Notă
ROW_NUMBER
este o valoare temporară calculată la executarea interogării. Pentru a păstra numerele într-un tabel, consultați Proprietatea și SECVENȚA IDENTITATE.
Convenții de sintaxă Transact-SQL
Sintaxă
Notă
Pentru a vizualiza sintaxa Transact-SQL pentru SQL Server 2014 și versiunile anterioare, consultați documentația versiunilor anterioare.
Argumente
PARTITION BY value_expression
Împarte setul de rezultate produs de clauza FROM în partiții cărora li se aplică funcția ROW_NUMBER. value_expression specifică coloana prin care setul de rezultate este partiționat. Dacă nu este specificat PARTITION BY
, funcția tratează toate rândurile setului de rezultate ale interogării ca un singur grup. Pentru mai multe informații, consultați Clauza OVER (Transact-SQL).
order_by_clause
Clauza ORDER BY
determină secvența în care rândurilor li se atribuie unic ROW_NUMBER
într-o partiție specificată. Este necesar. Pentru mai multe informații, consultați Clauza OVER (Transact-SQL).
Tipuri de returnare
bigint
Observații generale
Nu există nicio garanție că rândurile returnate de o interogare utilizând ROW_NUMBER()
vor fi ordonate exact la fel cu fiecare execuție, cu excepția cazului în care sunt îndeplinite următoarele condiții.
-
ale coloanei partiționate sunt unice.
-
Valorile coloanelor
ORDER BY
sunt unice. -
Combinațiile de valori ale coloanei partiției și coloanelor
ORDER BY
sunt unice.
ROW_NUMBER()
este nedeterminist. Pentru mai multe informații, consultați Funcții deterministe și nedeterministe.
Exemple
A. Exemple simple
Următoarea interogare returnează cele patru tabele de sistem în ordine alfabetică.
Iată setul de rezultate.
nume | recovery_model_desc |
---|---|
master | SIMPLE |
model | COMPLET |
msdb | SIMPLE |
tempdb | SIMPLE |
Pentru a adăuga o coloană cu numărul de rând în fața fiecăruia rând, adăugați o coloană cu funcția ROW_NUMBER
, în acest caz numită Row#
. Trebuie să mutați clauza ORDER BY
până la clauza OVER
.
Iată setul de rezultate.
Rândul # | name | recovery_model_desc |
---|---|---|
1 | master | SIMPLE |
2 | model | COMPLET |
3 | msdb | SIMPLE |
4 | tempdb | SIMPLE |
Adăugarea unui clauză din coloana recovery_model_desc
, va reporni numerotarea atunci când valoarea recovery_model_desc
se modifică.
Iată setul de rezultate.
Rândul # | name | recovery_model_desc |
---|---|---|
1 | model | COMPLET |
1 | master | SIMPLE |
2 | msdb | SIMPLE |
3 | tempdb | SIMPLE |
B. Returnarea numărului de rând pentru agenții de vânzări
Următorul exemplu calculează un număr de rând pentru agenții de vânzări din ciclurile Adventure Works pe baza clasamentului vânzărilor de la an la an.
Iată setul de rezultate .
C.Returnarea unui subset de rânduri
Următorul exemplu calculează numerele de rânduri pentru toate rândurile din tabelul SalesOrderHeader
în ordinea OrderDate
și returnează numai rândurile 50
către 60
inclusiv.
D. Utilizarea ROW_NUMBER () cu PARTITION
Următorul exemplu folosește argumentul PARTITION BY
pentru partiționarea rezultatului interogării setat de coloana TerritoryName
. Clauza ORDER BY
specificată în clauza OVER
ordonează rândurile din fiecare partiție prin coloana SalesYTD
. Clauza ORDER BY
din instrucțiunea SELECT
ordonează întregul rezultat al interogării setat de TerritoryName
.
Iată setul de rezultate.
Exemple: Azure Synapse Analytics și Parallel Data Warehouse
E. Returnarea numărului rândului pentru vânzători
Următorul exemplu returnează ROW_NUMBER
pentru reprezentanții de vânzări pe baza cotei lor de vânzări atribuite.
set de rezultate parțiale.
F. Utilizarea ROW_NUMBER () cu PARTITION
Următorul exemplu arată utilizarea funcției ROW_NUMBER
cu argumentul PARTITION BY
. Acest lucru face ca funcția ROW_NUMBER
să numeroteze rândurile din fiecare partiție.
Iată un set de rezultate parțiale.
Vezi și
RANK (Transact-SQL)
DENSE_RANK (Transact-SQL)
NTILE (Transact-SQL)