logo

Número de fila de SQL Server

El número de fila és el més comú funció de classificació utilitzat a SQL Server. La funció ROW_NUMBER(). genera un número seqüencial per a cada fila d'una partició en la sortida resultant. A cada partició, el número de la primera fila comença per 1. Sempre hem d'utilitzar el DEMANAT PER clàusula per garantir que els números s'assignen en la seqüència adequada. Els valors que retorna aquesta funció són de GRAN INT tipus de dades. Aquesta funció ve amb SQL Server 2005 i versions posteriors de MS SQL.

El ROW_NUMBER determina el valor temporal quan s'executa la consulta. Si voleu obtenir els números en una taula, heu de veure el IDENTITAT propietat i SEQUÈNCIA . Quan la funció ROW_NUMBER a SQL Server troba dos valors idèntics a la mateixa partició, els assigna números de rang diferents. El número de classificació es determinarà per l'ordre en què es mostrin.

cua de prioritats java

No hi ha cap garantia que el valor retornat per aquesta funció s'ordenarà igual per a cada execució tret que el següent sigui cert:

  • Els valors de les columnes particionades són únics
  • Els valors de les columnes ORDER BY són únics
  • La combinació de columnes Partició i Ordre per és única

Sintaxi

A continuació es mostra la sintaxi que il·lustra la funció ROW_NUMBER():

 ROW_NUMBER() OVER ( [PARTITION BY partition_expression, ... ] ORDER BY sort_expression [ASC | DESC], ... ) 

Entenem la sintaxi de la funció ROW NUMBER():

ACABAT

És important entendre aquesta clàusula que especifica la finestra o el conjunt de files que opera la funció de finestra. El PARTITION BY i ORDER BY són les dues clàusules possibles de la clàusula OVER. L'expressió ORDER BY de la clàusula OVER és compatible quan les files han d'estar en un ordre específic perquè la funció s'executi.

PARTICIÓ PER

miniaplicació
  • És una clàusula opcional que divideix el conjunt de resultats en particions (grups de files). A continuació, la funció ROW NUMBER() s'aplica a cada partició i assigna el número de classificació de cada partició per separat.
  • Si ometem la partició per clàusula, la funció ROW_NUMBER tractarà tot el resultat com una única partició i proporcionarà una classificació de dalt a baix.

DEMANAT PER

Aquesta clàusula ens permet ordenar les files del conjunt de resultats dins de cada partició. És una clàusula obligatòria perquè la funció ROW_NUMBER() depèn de l'ordre.

Exemple

Entendrem com funciona la funció ROW_NUMBER a la taula SQL Server amb un exemple. Primer, crearem una taula anomenada ' Persones ' utilitzant la declaració següent:

 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 continuació, afegirem alguns registres a aquesta taula mitjançant la declaració següent:

 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); 

A continuació, verifiqueu les dades amb el SELECCIONA declaració. Tindrem la següent sortida:

Número de fila de SQL Server

1. Exemple simple de ROW_NUMBER().

La següent afirmació mostra els detalls de la persona i afegeix un nombre enter seqüencial a cada fila utilitzant ROW_NUMBER():

 SELECT *, ROW_NUMBER() OVER (ORDER BY price) AS row_num FROM Persons; 

Aquí, no hem especificat la clàusula PARTITION BY de manera que la funció ROW_NUMBER() tractarà tot el conjunt de resultats com una única partició. Després d'executar la instrucció, obtindrem la següent sortida:

Número de fila de SQL Server

2. Exemple de ROW_NUMBER() sobre particions

La funció ROW NUMBER() que s'utilitza en aquest exemple proporciona un número seqüencial a cada registre dins d'una partició d'una taula. Sempre va reiniciar el número de fila quan canvia l'any:

 SELECT person_name, product, price, years, ROW_NUMBER() OVER ( PARTITION BY years ORDER BY price) AS row_num FROM Persons; 

Aquí, hem utilitzat la clàusula PARTITION BY que divideix el 'persones' taula en particions basades en 'anys' columna. Després de l'execució, obtindrem la següent sortida:

Número de fila de SQL Server

3. ROW_NUMBER() Exemple de paginació

execvp

També podem utilitzar la funció ROW_NUMBER() per a la paginació. Per exemple , si volem obtenir tota la informació d'una persona en una aplicació per pàgines, primer assignarem a cada fila un número seqüencial mitjançant la funció ROW_NUMBER(). En segon lloc, ordena les files per la pàgina sol·licitada.

La següent afirmació ho explica més clarament:

 SELECT * FROM ( SELECT ROW_NUMBER() OVER (ORDER BY price) AS row_num, person_name, product, price FROM Persons) P WHERE row_num &gt; 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 &gt; 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></=>