- 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.
-
Valores da coluna particionada são únicos.
-
Os valores das colunas
ORDER BY
são únicos. -
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)