Espandi Riduci a icona
Questo argomento non è stato ancora valutato - Valuta questo argomento

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 argomento Convenzioni della sintassi Transact-SQL


DENSE_RANK ( )    OVER ( [ < partition_by_clause > ] < order_by_clause > )
< 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.

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.

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
Il documento è risultato utile?
(1500 caratteri rimanenti)

Aggiunte alla community

AGGIUNGI
Microsoft sta conducendo un sondaggio in linea per comprendere l'opinione degli utenti in merito al sito Web di MSDN. Se si sceglie di partecipare, quando si lascia il sito Web di MSDN verrà visualizzato il sondaggio in linea.

Si desidera partecipare?
© 2013 Microsoft. Tutti i diritti riservati.