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.

Icono de vínculo a temasConvenciones 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áusula OVER ordena ROW_NUMBER. Si agrega una cláusula ORDER BY a la instrucción SELECT que ordena por columnas distintas del conjunto de resultados 'Row Number' the se ordenará por la cláusula ORDER 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

Contenido nuevo:
  • Se ha agregado un ejemplo del argumento PARTITION BY.

Vea también

Referencia

RANK (Transact-SQL)
DENSE_RANK (Transact-SQL)
NTILE (Transact-SQL)
Funciones de categoría (Transact-SQL)
Funciones (Transact-SQL)

Ayuda e información

Obtener ayuda sobre SQL Server 2005