¿Le resultó útil esta página?
Sus comentarios sobre este contenido son muy importantes. Háganos saber su opinión.
¿Tiene comentarios adicionales?
Caracteres restantes: 1500
ROW_NUMBER (Transact-SQL)
Collapse the table of content
Expand the table of content

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 temas Convenciones de sintaxis de Transact-SQL


ROW_NUMBER ( )     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 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.

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.

ms186734.note(es-es,SQL.90).gifNota:
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.

Adiciones de comunidad

AGREGAR
Mostrar:
© 2015 Microsoft