ROW_NUMBER (Transact-SQL)
Devuelve el número secuencial de una fila de una partición de un conjunto de resultados, comenzando con 1 para la primera fila de cada partición.
Sintaxis
ROW_NUMBER ( ) OVER ( [ <partition_by_clause> ] <order_by_clause> )
Argumentos
<partition_by_clause>
Divide el conjunto de resultados generado por la cláusula FROM en particiones a las que se aplica la función ROW_NUMBER. Para la sintaxis de PARTITION BY, vea OVER (cláusula de Transact-SQL).<order_by_clause>
Determina el orden en el que se asigna el valor ROW_NUMBER 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.
Tipos de valor devueltos
bigint
Notas
La cláusula ORDER BY determina la secuencia en la que se asigna a las filas el ROW_NUMBER único correspondiente en una partición especificada.
Ejemplos
A. Devolver el número de fila de vendedor
El siguiente ejemplo devuelve el ROW_NUMBER para los vendedores de AdventureWorks, basado en las ventas anuales hasta la fecha.
SELECT FirstName, LastName, ROW_NUMBER() OVER(ORDER BY SalesYTD DESC) AS 'Row Number', SalesYTD, PostalCode
FROM Sales.vSalesPerson
WHERE TerritoryName IS NOT NULL AND SalesYTD <> 0;
B. Devolver un subconjunto de filas
En el ejemplo siguiente se devuelven filas con los números 50 a 60 inclusive en el orden de OrderDate.
USE AdventureWorks;
GO
WITH OrderedOrders AS
(
SELECT SalesOrderID, OrderDate,
ROW_NUMBER() OVER (ORDER BY OrderDate) AS 'RowNumber'
FROM Sales.SalesOrderHeader
)
SELECT *
FROM OrderedOrders
WHERE RowNumber BETWEEN 50 AND 60;
C. Usar ROW_NUMBER() con PARTITION
El ejemplo siguiente muestra cómo utilizar la función ROW_NUMBER con el argumento PARTITION BY.
SELECT FirstName, LastName, ROW_NUMBER() OVER(PARTITION BY PostalCode ORDER BY SalesYTD DESC) AS 'Row Number', SalesYTD, PostalCode
FROM Sales.vSalesPerson
WHERE TerritoryName IS NOT NULL AND SalesYTD <> 0;