Esta documentación está archivada y no tiene mantenimiento.

RANK (Transact-SQL)

Devuelve el rango de cada fila en la partición de un conjunto de resultados. El rango de una fila es uno más el número de rangos anteriores a la fila en cuestión.

Icono de vínculo a temas Convenciones de sintaxis de Transact-SQL


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

< partition_by_clause >

Divide el conjunto de resultados generado por la cláusula FROM en particiones a las que se aplica la función RANK. Para la sintaxis de PARTITION BY, vea OVER (cláusula de Transact-SQL).

< order_by_clause >

Determina el orden en el que los valores de RANK se aplican a las filas de una partición. Para obtener más información, vea ORDER BY (cláusula de Transact-SQL). Un entero no puede representar una columna cuando se usa la cláusula <order_by_clause> en una función de categoría.

Si dos o más filas se enlazan en un rango, cada fila enlazada recibe el mismo rango. Por ejemplo, si los dos mejores vendedores tienen el mismo valor de SalesYTD, los dos tienen el rango uno. El vendedor con el siguiente valor más alto de SalesYTD recibe el rango tres, porque ya hay dos filas con un rango superior. Por tanto, la función RANK no siempre devuelve enteros consecutivos.

El criterio de ordenación utilizado por la consulta global determina el orden en que aparecen las filas en el conjunto de resultados.

En el ejemplo siguiente se otorga un rango a los productos de inventario de acuerdo con sus cantidades. Se crean particiones del conjunto de filas por LocationID y se ordenan por Quantity. Observe que ORDER BY de la cláusula OVER ordena RANK y ORDER BY de la instrucción SELECT ordena el conjunto de resultados.

USE AdventureWorks;
GO
SELECT i.ProductID, p.Name, i.LocationID, i.Quantity
    ,RANK() OVER 
    (PARTITION BY i.LocationID ORDER BY i.Quantity DESC) AS 'RANK'
FROM Production.ProductInventory i 
    INNER JOIN Production.Product p 
        ON i.ProductID = p.ProductID
ORDER BY p.Name;
GO
Mostrar: