- 09/11/2017
- 5 minuti per leggere
-
- j
- c
- M
- m
- M
-
+8
Si applica a: SQL Server (tutte le versioni supportate) Database SQL di Azure Istanza gestita di Azure SQL Azure Synapse Analytics Parallel Data Warehouse
Numera loutput di un set di risultati. Più specificamente, restituisce il numero sequenziale di una riga allinterno di una partizione di un set di risultati, a partire da 1 per la prima riga in ogni partizione.
Nota
ROW_NUMBER
è un valore temporaneo calcolato quando viene eseguita la query. Per rendere persistenti i numeri in una tabella, vedere Proprietà IDENTITY e SEQUENCE.
Convenzioni della sintassi Transact-SQL
Sintassi
Nota
Per visualizzare la sintassi Transact-SQL per SQL Server 2014 e versioni precedenti, vedere la documentazione delle versioni precedenti.
Argomenti
PARTITION BY value_expression
Divide il set di risultati prodotto dalla clausola FROM in partizioni a cui viene applicata la funzione ROW_NUMBER. value_expression specifica la colonna in base alla quale viene partizionato il set di risultati. Se PARTITION BY
non è specificato, la funzione tratta tutte le righe del set di risultati della query come un unico gruppo. Per ulteriori informazioni, consulta la clausola OVER (Transact-SQL).
order_by_clause
La clausola ORDER BY
determina la sequenza in cui alle righe viene assegnato il loro unico ROW_NUMBER
allinterno di una partizione specificata. È richiesto. Per ulteriori informazioni, consulta la clausola OVER (Transact-SQL).
Tipi restituiti
bigint
Osservazioni generali
Non cè garanzia che le righe restituite da una query che utilizza ROW_NUMBER()
verranno ordinate esattamente nello stesso modo a ogni esecuzione, a meno che non siano vere le seguenti condizioni.
-
Valori della colonna partizionata sono univoci.
-
I valori delle colonne
ORDER BY
sono univoci. -
Le combinazioni di valori della colonna della partizione e delle colonne
ORDER BY
sono uniche.
ROW_NUMBER()
non è deterministico. Per ulteriori informazioni, vedere Funzioni deterministiche e non deterministiche.
Esempi
A. Esempi semplici
La seguente query restituisce le quattro tabelle di sistema in ordine alfabetico.
Ecco il set di risultati.
name | recovery_model_desc |
---|---|
master | SEMPLICE |
modello | FULL |
msdb | SEMPLICE |
tempdb | SEMPLICE |
Per aggiungere una colonna del numero di riga davanti a ciascuna riga, aggiungi una colonna con la funzione ROW_NUMBER
, in questo caso denominata Row#
. È necessario spostare la clausola ORDER BY
fino alla clausola OVER
.
Ecco il set di risultati.
Riga # | name | recovery_model_desc |
---|---|---|
1 | master | SEMPLICE |
2 | modello | COMPLETO |
3 | msdb | SEMPLICE |
4 | tempdb | SEMPLICE |
Aggiunta di un PARTITION BY
nella colonna recovery_model_desc
riavvia la numerazione quando il valore recovery_model_desc
cambia.
Ecco il set di risultati.
Riga # | name | recovery_model_desc |
---|---|---|
1 | modello | COMPLETO |
1 | master | SEMPLICE |
2 | msdb | SEMPLICE |
3 | tempdb | SEMPLICE |
B. Restituzione del numero di riga per i venditori
Il seguente esempio calcola un numero di riga per i venditori in Adventure Works Cycles in base alla loro classifica delle vendite da inizio anno.
Ecco il set di risultati .
C.Restituzione di un sottoinsieme di righe
Lesempio seguente calcola i numeri di riga per tutte le righe nella tabella SalesOrderHeader
nellordine OrderDate
e restituisce solo le righe da 50
a 60
incluse.
D. Utilizzo di ROW_NUMBER () con PARTITION
Lesempio seguente utilizza largomento PARTITION BY
per partizionare il risultato della query impostato dalla colonna TerritoryName
. La clausola ORDER BY
specificata nella clausola OVER
ordina le righe in ogni partizione in base alla colonna SalesYTD
. La clausola ORDER BY
nellistruzione SELECT
ordina lintero risultato della query impostato da TerritoryName
.
Ecco il set di risultati.
Esempi: Azure Synapse Analytics e Parallel Data Warehouse
E. Restituzione del numero di riga per i venditori
Lesempio seguente restituisce ROW_NUMBER
per i rappresentanti di vendita in base alla quota di vendita assegnata.
Ecco un set di risultati parziali.
F. Utilizzo di ROW_NUMBER () con PARTITION
Lesempio seguente mostra lutilizzo della funzione ROW_NUMBER
con largomento PARTITION BY
. In questo modo la funzione ROW_NUMBER
numererà le righe in ogni partizione.
Ecco un set di risultati parziale.
Vedere anche
RANK (Transact-SQL)
DENSE_RANK (Transact-SQL)
NTILE (Transact-SQL)