Condividi tramite


DENSE_RANK (Transact-SQL)

Restituisce il rango delle righe nella partizione di un set dei risultati, senza gap nell'assegnazione dei ranghi. Il rango di una riga corrisponde a 1 più il numero di ranghi distinti che precedono la riga in questione.

Icona di collegamento a un argomentoConvenzioni della sintassi Transact-SQL

Sintassi

DENSE_RANK ( )    OVER ( [ < partition_by_clause > ] < order_by_clause > )

Argomenti

  • < partition_by_clause >
    Suddivide il set di risultati generato dalla clausola FROM in partizioni alle quali viene applicata la funzione DENSE_RANK. Per informazioni sulla sintassi di PARTITION BY, vedere Clausola OVER (Transact-SQL).
  • < order_by_clause >
    Determina l'ordine di applicazione dei valori DENSE_RANK alle righe in una partizione. Una colonna non può essere rappresentata da un valore integer nell'argomento <order_by_clause> utilizzato in una funzione di rango.

Tipi restituiti

bigint

Osservazioni

Se due o più righe hanno un valore equivalente per l'assegnazione del rango nella stessa partizione, a ogni riga viene assegnato lo stesso rango. Ad esempio, se sono presenti due venditori che hanno raggiunto i risultati di vendita maggiori con lo stesso valore SalesYTD, a entrambi verrà assegnato il rango 1. Al venditore con il valore successivo SalesYTD più alto verrà assegnato il rango 2. Tale valore di rango corrisponde a 1 più il numero di righe distinte che precedono questa riga. I numeri restituiti dalla funzione DENSE_RANK sono pertanto sempre consecutivi e senza gap.

L'ordinamento utilizzato per l'intera query determina l'ordine di visualizzazione delle righe nel risultato. Ciò significa che una riga con numero di rango 1 non sarà necessariamente la prima riga nella partizione.

Esempi

Nell'esempio seguente viene restituito il valore DENSE_RANK della quantità di prodotti nelle varie posizioni. Si noti che ORDER BY nella clausola OVER ordina DENSE_RANK e che ORDER BY dell'istruzione SELECT ordina il set di risultati.

USE AdventureWorks;
GO
SELECT i.ProductID, p.Name, i.LocationID, i.Quantity, 
    DENSE_RANK() OVER (PARTITION BY i.LocationID ORDER BY i.Quantity)     AS DENSE_RANK
FROM Production.ProductInventory i 
    JOIN Production.Product p ON i.ProductID = p.ProductID
    ORDER BY Name;
GO

Vedere anche

Riferimento

RANK (Transact-SQL)
ROW_NUMBER (Transact-SQL)
NTILE (Transact-SQL)
Funzioni di rango (Transact-SQL)
Funzioni (Transact-SQL)

Guida in linea e informazioni

Assistenza su SQL Server 2005