ROW_NUMBER (Transact-SQL) (Italiano)

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

  1. Valori della colonna partizionata sono univoci.

  2. I valori delle colonne ORDER BY sono univoci.

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

Lascia un commento

Il tuo indirizzo email non sarà pubblicato. I campi obbligatori sono contrassegnati *