ROW_NUMBER (Transact-SQL) (Français)

  • 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.

  1. Valeurs de la colonne partitionnée sont uniques.

  2. Les valeurs des colonnes ORDER BY sont uniques.

  3. 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)

Laisser un commentaire

Votre adresse e-mail ne sera pas publiée. Les champs obligatoires sont indiqués avec *