Partilhar via


ROW_NUMBER (Transact-SQL)

Retorna o número seqüencial de uma linha em uma partição de um conjunto de resultados, iniciando em 1 para a primeira linha de cada partição.

Ícone de vínculo de tópicoConvenções de sintaxe Transact-SQL

Sintaxe

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

Argumentos

  • <partition_by_clause>
    Divide o conjunto de resultados produzido pela cláusula FROM nas partições às quais a função ROW_NUMBER é aplicada. Para obter a sintaxe de PARTITION BY, consulte Cláusula OVER (Transact-SQL).

  • <order_by_clause>
    Determina a ordem na qual o valor de ROW_NUMBER é atribuído às linhas de uma partição. Para obter mais informações, consulte Cláusula ORDER BY [Transact-SQL]. Um inteiro não pode representar uma coluna quando a <order_by_clause> é usada em uma função de classificação.

Tipos de retorno

bigint

Comentários

A cláusula ORDER BY determina a seqüência na qual as linhas recebem seu ROW_NUMBER exclusivo em uma partição especificada.

Exemplos

A. Retornando o número de linha para vendedores

O exemplo a seguir retorna o ROW_NUMBER para os vendedores em AdventureWorks com base nas vendas acumuladas no ano.

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. Retornando um subconjunto de linhas

O exemplo a seguir retorna linhas com números de 50 a 60 inclusive, na ordem 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. Usando ROW_NUMBER () com PARTITION

O exemplo a seguir mostra o uso da função ROW_NUMBER com o 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;