logo

Numéro de ligne SQL Server

Le numéro de ligne est le plus courant fonction de classement utilisé dans SQL Server. La fonction ROW_NUMBER() génère un numéro séquentiel pour chaque ligne dans une partition dans la sortie résultante. Dans chaque partition, le numéro de la première ligne commence par 1. Il faut toujours utiliser le COMMANDÉ PAR clause pour garantir que les numéros sont attribués dans le bon ordre. Les valeurs renvoyées par cette fonction sont de GRAND INT Type de données. Cette fonction est fournie avec SQL Server 2005 et les versions ultérieures de MS SQL.

Le ROW_NUMBER détermine le valeur temporaire lorsque la requête est exécutée. Si vous souhaitez obtenir les chiffres dans un tableau, vous devez voir le IDENTITÉ la propriété et SÉQUENCE . Lorsque la fonction ROW_NUMBER de SQL Server rencontre deux valeurs identiques dans la même partition, elle leur attribue des numéros de rang différents. Le numéro de rang sera déterminé par l’ordre dans lequel ils sont affichés.

Il n'y a aucune garantie que la valeur renvoyée par cette fonction sera ordonnée de la même manière à chaque exécution, sauf si les conditions suivantes sont vraies :

  • Les valeurs des colonnes partitionnées sont uniques
  • Les valeurs des colonnes ORDER BY sont uniques
  • La combinaison des colonnes Partition et Order By est unique

Syntaxe

Voici la syntaxe qui illustre la fonction ROW_NUMBER() :

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

Comprenons la syntaxe de la fonction ROW NUMBER() :

SUR

Il est important de comprendre cette clause qui spécifie la fenêtre ou l'ensemble de lignes exploité par la fonction window. Les clauses PARTITION BY et ORDER BY sont les deux clauses possibles de la clause OVER. L'expression ORDER BY de la clause OVER est prise en charge lorsque les lignes doivent être présentées dans un ordre spécifique pour que la fonction s'exécute.

PARTITION PAR

  • Il s'agit d'une clause facultative qui divise le jeu de résultats en partitions (groupes de lignes). Ensuite, la fonction ROW NUMBER() est appliquée à chaque partition et attribue le numéro de rang de chaque partition séparément.
  • Si nous omettons la clause partition by, la fonction ROW_NUMBER traitera l'ensemble du résultat comme une seule partition et fournira un classement de haut en bas.

COMMANDÉ PAR

Cette clause nous permet de trier les lignes du jeu de résultats au sein de chaque partition. Il s'agit d'une clause obligatoire car la fonction ROW_NUMBER() dépend de l'ordre.

Exemple

Comprenons comment fonctionne la fonction ROW_NUMBER dans la table SQL Server avec un exemple. Tout d'abord, nous allons créer une table nommée ' Personnes ' en utilisant la déclaration ci-dessous :

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

Ensuite, nous ajouterons quelques enregistrements dans ce tableau en utilisant l'instruction ci-dessous :

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

Ensuite, vérifiez les données à l'aide du SÉLECTIONNER déclaration. Nous obtiendrons le résultat ci-dessous :

Numéro de ligne SQL Server

1. Exemple simple de ROW_NUMBER()

La déclaration suivante affiche les détails de la personne et ajoute un nombre entier séquentiel à chaque ligne en utilisant ROW_NUMBER() :

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

Ici, nous n'avons pas spécifié la clause PARTITION BY afin que la fonction ROW_NUMBER() traite l'ensemble des résultats comme une seule partition. Après l'exécution de l'instruction, nous obtiendrons le résultat suivant :

Numéro de ligne SQL Server

2. Exemple de ROW_NUMBER() sur des partitions

La fonction ROW NUMBER() utilisée dans cet exemple fournit un numéro séquentiel à chaque enregistrement d'une partition d'une table. Il réinitialise toujours le numéro de ligne lorsque l'année change :

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

Ici, nous avons utilisé la clause PARTITION BY qui divise le 'Personnes' table en partitions basées sur le 'années' colonne. Après exécution, nous obtiendrons le résultat ci-dessous :

Numéro de ligne SQL Server

3. Exemple ROW_NUMBER() pour la pagination

Nous pouvons également utiliser la fonction ROW_NUMBER() pour la pagination. Par exemple , si nous voulons obtenir toutes les informations d'une personne dans une application par pages, nous allons d'abord attribuer à chaque ligne un numéro séquentiel à l'aide de la fonction ROW_NUMBER(). Deuxièmement, triez les lignes selon la page demandée.

La déclaration suivante l’explique plus clairement :

 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></=>