O número da linha é o mais comum função de classificação usado no SQL Server. A função ROW_NUMBER() gera um número sequencial para cada linha dentro de uma partição na saída resultante. Em cada partição, o número da primeira linha começa com 1. Devemos sempre usar o ORDENAR POR cláusula para garantir que os números sejam atribuídos na sequência correta. Os valores retornados por esta função são de GRANDE INT tipo de dados. Esta função vem com o SQL Server 2005 e versões posteriores do MS SQL.
O ROW_NUMBER determina o valor temporário quando a consulta é executada. Se você quiser obter os números de uma tabela, você precisa ver o IDENTIDADE propriedade e SEQÜÊNCIA . Quando a função ROW_NUMBER no SQL Server encontra dois valores idênticos na mesma partição, ela atribui números de classificação diferentes a eles. O número da classificação será determinado pela ordem em que são exibidos.
Não há garantia de que o valor retornado por esta função será ordenado da mesma forma para cada execução, a menos que o seguinte seja verdadeiro:
- Os valores das colunas particionadas são únicos
- Os valores das colunas ORDER BY são únicos
- A combinação das colunas Partição e Ordenar por é única
Sintaxe
A seguir está a sintaxe que ilustra a função ROW_NUMBER():
ROW_NUMBER() OVER ( [PARTITION BY partition_expression, ... ] ORDER BY sort_expression [ASC | DESC], ... )
Vamos entender a sintaxe da função ROW NUMBER():
classificação por mesclagem
SOBRE
É importante entender esta cláusula que especifica a janela ou conjunto de linhas que a função de janela opera. O PARTITION BY e ORDER BY são as duas cláusulas possíveis da cláusula OVER. A expressão ORDER BY da cláusula OVER é suportada quando as linhas devem vir em uma ordem específica para a execução da função.
PARTIÇÃO POR
- É uma cláusula opcional que divide o conjunto de resultados em partições (grupos de linhas). Em seguida, a função ROW NUMBER() é aplicada a cada partição e atribui o número de classificação de cada partição separadamente.
- Se omitirmos a cláusula partição por, a função ROW_NUMBER tratará todo o resultado como uma única partição e fornecerá classificação de cima para baixo.
ORDENAR POR
Esta cláusula nos permite classificar as linhas do conjunto de resultados dentro de cada partição. É uma cláusula obrigatória porque a função ROW_NUMBER() depende da ordem.
Exemplo
Vamos entender como funciona a função ROW_NUMBER na tabela SQL Server com um exemplo. Primeiro, criaremos uma tabela chamada ' Pessoas 'usando a instrução abaixo:
cadeia de lista java
CREATE TABLE Persons ( person_name varchar(45) NOT NULL, product varchar(45) DEFAULT NULL, country varchar(25) DEFAULT NULL, price float, years int NOT NULL );
A seguir, adicionaremos alguns registros a esta tabela usando a instrução abaixo:
INSERT INTO Persons (person_name, product, country, price, years) VALUES ('Steffen', 'Computer', 'USA', 20000.00, 2018), ('Joseph', 'Laptop', 'India', 35000.00, 2016), ('Kevin', 'TV', 'USA', 15000.00, 2016), ('Thompson', 'Mobile', 'France', 12500.00, 2017), ('Donald', 'Laptop', 'England', 30000.00, 2018), ('Joseph', 'Mobile', 'India', 18000.00, 2018), ('Matthew', 'Desktop', 'France', 22000.00, 2017), ('Antonio', 'Mouse', 'England', 1200.00, 2016);
Em seguida, verifique os dados usando o SELECIONAR declaração. Obteremos a saída abaixo:
1. Exemplo simples de ROW_NUMBER()
A seguinte declaração exibe os detalhes da pessoa e adiciona um número inteiro sequencial para cada linha usando ROW_NUMBER():
SELECT *, ROW_NUMBER() OVER (ORDER BY price) AS row_num FROM Persons;
Aqui, não especificamos a cláusula PARTITION BY para que a função ROW_NUMBER() trate todo o conjunto de resultados como uma única partição. Após a execução da instrução, obteremos a seguinte saída:
2. Exemplo de ROW_NUMBER() sobre partições
A função ROW NUMBER() é usada neste exemplo e fornece um número sequencial para cada registro em uma partição de uma tabela. Sempre reinicializou o número da linha quando o ano muda:
SELECT person_name, product, price, years, ROW_NUMBER() OVER ( PARTITION BY years ORDER BY price) AS row_num FROM Persons;
Aqui, usamos a cláusula PARTITION BY que divide o 'Pessoas' tabela em partições com base no 'anos' coluna. Após a execução, obteremos a saída abaixo:
3. Exemplo ROW_NUMBER() para paginação
atriz Zeenat Aman
Também podemos usar a função ROW_NUMBER() para paginação. Por exemplo , se quisermos obter todas as informações de uma pessoa em um aplicativo por páginas, primeiro atribuiremos a cada linha um número sequencial usando a função ROW_NUMBER(). Segundo, classifique as linhas pela página solicitada.
A seguinte declaração explica isso mais claramente:
SELECT * FROM ( SELECT ROW_NUMBER() OVER (ORDER BY price) AS row_num, person_name, product, price FROM Persons) P WHERE row_num > 3 AND row_num <= 6; < pre> <p>It will give the following output:</p> <img src="//techcodeview.com/img/sql-server-tutorials/96/sql-server-row-number-4.webp" alt="SQL Server Row Number"> <p>If we do not want to use the <strong>subquery</strong> , we can use the <strong>common table expression (CTE)</strong> as below statement:</p> <pre> WITH CTE_Person AS ( SELECT ROW_NUMBER() OVER (ORDER BY price) AS row_num, person_name, product, price FROM Persons) SELECT * FROM CTE_Person WHERE row_num > 3 AND row_num <= 6; < pre> <p>In this example, we have first specified the CTE that uses the ROW_NUMBER() function to assign each row in the result set sequentially. Second, the outer query returned the desired result. After execution, we will get the following output:</p> <img src="//techcodeview.com/img/sql-server-tutorials/96/sql-server-row-number-5.webp" alt="SQL Server Row Number"> <h3>Conclusion</h3> <p>In this article, we learned how to give a sequential number to each record within a partition of a query using the ROW NUMBER() function in SQL Server.</p> <hr></=></pre></=>=>