ROW_NUMBER (Transact-SQL)
Actualizado: 17 de julio de 2006
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.
Convenciones de sintaxis de Transact-SQL
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
[!NOTA]
ORDER BY
en la cláusulaOVER
ordenaROW_NUMBER
. Si agrega una cláusulaORDER BY
a la instrucciónSELECT
que ordena por columnas distintas del conjunto de resultados'Row Number' the
se ordenará por la cláusulaORDER BY
externa.
El siguiente ejemplo devuelve el ROW_NUMBER
para los vendedores de AdventureWorks
, basado en las ventas anuales hasta la fecha.
USE AdventureWorks;
GO
SELECT c.FirstName, c.LastName
,ROW_NUMBER() OVER(ORDER BY SalesYTD DESC) AS 'Row Number'
,s.SalesYTD, a.PostalCode
FROM Sales.SalesPerson s
INNER JOIN Person.Contact c
ON s.SalesPersonID = c.ContactID
INNER JOIN Person.Address a
ON a.AddressID = c.ContactID
WHERE TerritoryID IS NOT NULL
AND SalesYTD <> 0;
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;
En el siguiente ejemplo se muestra la forma de utilizar el argumento PARTITION BY
.
USE AdventureWorks;
GO
SELECT c.FirstName, c.LastName
,ROW_NUMBER() OVER
(PARTITION BY PostalCode ORDER BY SalesYTD DESC) AS 'Row Number'
,s.SalesYTD, a.PostalCode
FROM Sales.SalesPerson s
INNER JOIN Person.Contact c
ON s.SalesPersonID = c.ContactID
INNER JOIN Person.Address a
ON a.AddressID = c.ContactID
WHERE TerritoryID IS NOT NULL
AND SalesYTD <> 0;
Historial de cambios
Versión | Historial |
---|---|
17 de julio de 2006 |
|
Vea también
Referencia
RANK (Transact-SQL)
DENSE_RANK (Transact-SQL)
NTILE (Transact-SQL)
Funciones de categoría (Transact-SQL)
Funciones (Transact-SQL)