ROW_NUMBER (Transact-SQL) (Português)

  • 11/09/2017
  • 5 minutos para ler
    • j
    • c
    • M
    • m
    • M
    • +8

Aplica-se a: SQL Server (todas as versões com suporte) Banco de dados SQL do Azure Instância gerenciada do Azure SQL Azure Synapse Analytics Data Warehouse paralelo

Numera a saída de um conjunto de resultados. Mais especificamente, retorna o número sequencial de uma linha dentro de uma partição de um conjunto de resultados, começando em 1 para a primeira linha em cada partição.

Nota

ROW_NUMBER é um valor temporário calculado quando a consulta é executada. Para persistir os números em uma tabela, consulte Propriedade de IDENTIDADE e SEQUÊNCIA.

Convenções de sintaxe Transact-SQL

Sintaxe

Observação

Para visualizar a sintaxe Transact-SQL do SQL Server 2014 e anteriores, consulte a documentação das versões anteriores.

Argumentos

PARTITION BY value_expression
Divide o conjunto de resultados produzido pela cláusula FROM em partições às quais a função ROW_NUMBER é aplicada. value_expression especifica a coluna pela qual o conjunto de resultados é particionado. Se PARTITION BY não for especificado, a função tratará todas as linhas do conjunto de resultados da consulta como um único grupo. Para obter mais informações, consulte Cláusula OVER (Transact-SQL).

order_by_clause
A cláusula ORDER BY determina a sequência na qual as linhas são atribuídas a seu exclusivo ROW_NUMBER dentro de uma partição especificada. É necessário. Para obter mais informações, consulte Cláusula OVER (Transact-SQL).

Tipos de retorno

bigint

Observações gerais

Não há garantia que as linhas retornadas por uma consulta usando ROW_NUMBER() serão ordenadas exatamente da mesma forma em cada execução, a menos que as seguintes condições sejam verdadeiras.

  1. Valores da coluna particionada são únicos.

  2. Os valores das colunas ORDER BY são únicos.

  3. Combinações de valores da coluna de partição e ORDER BY colunas são exclusivas.

ROW_NUMBER() é não determinístico. Para obter mais informações, consulte Funções determinísticas e não determinísticas.

Exemplos

A. Exemplos simples

A consulta a seguir retorna as quatro tabelas do sistema em ordem alfabética.

Aqui está o conjunto de resultados.

nome recovery_model_desc
mestre SIMPLES
modelo COMPLETO
msdb SIMPLES
tempdb SIMPLES

Para adicionar uma coluna de número de linha na frente de cada linha, adicione uma coluna com a função ROW_NUMBER, neste caso denominada Row#. Você deve mover a cláusula ORDER BY para a cláusula OVER.

Aqui está o conjunto de resultados.

Linha # name recovery_model_desc
1 mestre SIMPLES
2 modelo COMPLETO
3 msdb SIMPLES
4 tempdb SIMPLES

Adicionando um PARTITION BY cláusula na coluna recovery_model_desc, irá reiniciar a numeração quando o recovery_model_desc valor mudar.

Aqui está o conjunto de resultados.

Linha # name recovery_model_desc
1 modelo COMPLETO
1 mestre SIMPLES
2 msdb SIMPLES
3 tempdb SIMPLES

B. Retornando o número da linha para vendedores

O exemplo a seguir calcula um número de linha para os vendedores nos Ciclos da Adventure Works com base em sua classificação de vendas no ano até o momento.

Aqui está o conjunto de resultados .

C.Retornando um subconjunto de linhas

O exemplo a seguir calcula os números das linhas para todas as linhas na tabela SalesOrderHeader na ordem de OrderDate e retorna apenas as linhas 50 a 60 inclusive.

D. Usando ROW_NUMBER () com PARTITION

O exemplo a seguir usa o argumento PARTITION BY para particionar o resultado da consulta definido pela coluna TerritoryName. A cláusula ORDER BY especificada na cláusula OVER ordena as linhas em cada partição pela coluna SalesYTD. A cláusula ORDER BY na instrução SELECT ordena todo o resultado da consulta definido por TerritoryName.

Aqui está o conjunto de resultados.

Exemplos: Azure Synapse Analytics e Parallel Data Warehouse

E. Retornando o número da linha para vendedores

O exemplo a seguir retorna ROW_NUMBER para representantes de vendas com base em sua cota de vendas atribuída.

Aqui está um conjunto de resultados parcial.

F. Usando ROW_NUMBER () com PARTITION

O exemplo a seguir mostra o uso da função ROW_NUMBER com o argumento PARTITION BY. Isso faz com que a função ROW_NUMBER numere as linhas em cada partição.

Aqui está um conjunto de resultados parcial.

Consulte também

RANK (Transact-SQL)
DENSE_RANK (Transact-SQL)
NTILE (Transact-SQL)

Deixe uma resposta

O seu endereço de email não será publicado. Campos obrigatórios marcados com *