ROW_NUMBER (Transact-SQL) (Română)

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

  1. ale coloanei partiționate sunt unice.

  2. Valorile coloanelor ORDER BY sunt unice.

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

Lasă un răspuns

Adresa ta de email nu va fi publicată. Câmpurile obligatorii sunt marcate cu *