- 11/09/2017
- 5 minutes de lecture
-
- j
- c
- M
- m
- M
-
+8
Sapplique à: SQL Server (toutes les versions prises en charge) Azure SQL Database Instance gérée Azure SQL Azure Synapse Analytics Parallel Data Warehouse
Numérote la sortie dun jeu de résultats. Plus spécifiquement, renvoie le numéro séquentiel dune ligne dans une partition dun jeu de résultats, en commençant à 1 pour la première ligne de chaque partition.
Remarque
ROW_NUMBER
est une valeur temporaire calculée lors de lexécution de la requête. Pour conserver les nombres dans une table, consultez Propriété IDENTITY et SEQUENCE.
Conventions de syntaxe Transact-SQL
Syntaxe
Remarque
Pour afficher la syntaxe Transact-SQL pour SQL Server 2014 et versions antérieures, consultez la documentation des versions précédentes.
Arguments
PARTITION BY value_expression
Divise le jeu de résultats produit par la clause FROM en partitions auxquelles la fonction ROW_NUMBER est appliquée. value_expression spécifie la colonne par laquelle le jeu de résultats est partitionné. Si PARTITION BY
nest pas spécifié, la fonction traite toutes les lignes de lensemble de résultats de la requête comme un seul groupe. Pour plus dinformations, consultez Clause OVER (Transact-SQL).
order_by_clause
La clause ORDER BY
détermine la séquence dans laquelle les lignes se voient attribuer leur unique ROW_NUMBER
dans une partition spécifiée. Cest requis. Pour plus dinformations, consultez la clause OVER (Transact-SQL).
Types de retour
bigint
Remarques générales
Il ny a aucune garantie que les lignes renvoyées par une requête utilisant ROW_NUMBER()
seront ordonnées exactement de la même manière à chaque exécution, sauf si les conditions suivantes sont remplies.
-
Valeurs de la colonne partitionnée sont uniques.
-
Les valeurs des colonnes
ORDER BY
sont uniques. -
Les combinaisons de valeurs de la colonne de partition et des colonnes
ORDER BY
sont uniques.
ROW_NUMBER()
nest pas déterministe. Pour plus dinformations, voir Fonctions déterministes et non déterministes.
Exemples
A. Exemples simples
La requête suivante renvoie les quatre tables système par ordre alphabétique.
Voici lensemble de résultats.
nom | recovery_model_desc |
---|---|
maître | SIMPLE |
modèle | FULL |
msdb | SIMPLE |
tempdb | SIMPLE |
Pour ajouter une colonne de numéro de ligne devant chaque row, ajoutez une colonne avec la fonction ROW_NUMBER
, dans ce cas nommée Row#
. Vous devez déplacer la clause ORDER BY
vers la clause OVER
.
Voici lensemble des résultats.
Row # | nom | recovery_model_desc |
---|---|---|
1 | maître | SIMPLE |
2 | modèle | FULL |
3 | msdb | SIMPLE |
4 | tempdb | SIMPLE |
Ajout dun PARTITION BY
dans la colonne recovery_model_desc
, redémarrera la numérotation lorsque la valeur recovery_model_desc
changera.
Voici lensemble des résultats.
Row # | nom | recovery_model_desc |
---|---|---|
1 | modèle | FULL |
1 | maître | SIMPLE |
2 | msdb | SIMPLE |
3 | tempdb | SIMPLE |
B. Renvoi du numéro de ligne pour les vendeurs
Lexemple suivant calcule un numéro de ligne pour les vendeurs dans Adventure Works Cycles en fonction de leur classement des ventes depuis le début de lannée.
Voici lensemble de résultats .
C.Renvoyer un sous-ensemble de lignes
Lexemple suivant calcule les numéros de ligne pour toutes les lignes de la table SalesOrderHeader
dans lordre de OrderDate
et renvoie uniquement les lignes 50
à 60
inclus.
D. Utilisation de ROW_NUMBER () avec PARTITION
Lexemple suivant utilise largument PARTITION BY
pour partitionner le jeu de résultats de la requête par la colonne TerritoryName
. La clause ORDER BY
spécifiée dans la clause OVER
trie les lignes de chaque partition selon la colonne SalesYTD
. La clause ORDER BY
dans linstruction SELECT
classe lensemble des résultats de la requête par TerritoryName
.
Voici lensemble de résultats.
Exemples: Azure Synapse Analytics et Parallel Data Warehouse
E. Renvoi du numéro de ligne pour les commerciaux
Lexemple suivant renvoie le ROW_NUMBER
pour les commerciaux en fonction de leur quota de vente attribué.
Voici un ensemble de résultats partiel.
F. Utilisation de ROW_NUMBER () avec PARTITION
Lexemple suivant montre lutilisation de la fonction ROW_NUMBER
avec largument PARTITION BY
. Cela fait que la fonction ROW_NUMBER
numérote les lignes de chaque partition.
Voici un ensemble de résultats partiel.
Voir aussi
RANK (Transact-SQL)
DENSE_RANK (Transact-SQL)
NTILE (Transact-SQL)