ROW_NUMBER (Transact-SQL)
Mis à jour : 17 juillet 2006
Retourne le numéro séquentiel d'une ligne d'une partition d'un ensemble de résultats, en commençant à 1 pour la première ligne de chaque partition.
Conventions de la syntaxe de Transact-SQL
Syntaxe
ROW_NUMBER ( ) OVER ( [ <partition_by_clause> ] <order_by_clause> )
Arguments
- <partition_by_clause>
Subdivise l'ensemble de résultats généré par la clause FROM en partitions auxquelles la fonction ROW_NUMBER est appliquée. Pour connaître la syntaxe de PARTITION BY, consultez Clause OVER (Transact-SQL).
- <order_by_clause>
Détermine l'ordre dans lequel la valeur ROW_NUMBER est affectée aux lignes d'une partition. Pour plus d'informations, consultez Clause ORDER BY (Transact-SQL). Un entier ne peut pas représenter une colonne lorsque <order_by_clause> est utilisé dans une fonction de classement.
Notes
La clause ORDER BY détermine la séquence dans laquelle les lignes d'une partition spécifique reçoivent leur valeur ROW_NUMBER unique.
Types de retour
bigint
Exemples
Remarque : |
---|
Le paramètre ORDER BY de la clause OVER détermine l'ordre de ROW_NUMBER . Si vous ajoutez une clause ORDER BY à l'instruction SELECT qui trie en fonction d'une autre colonne que 'Row Number', l'ensemble de résultats sera ordonné par la clause ORDER BY externe. |
L'exemple suivant retourne le ROW_NUMBER
des vendeurs de AdventureWorks
en fonction des ventes de l'année.
USE AdventureWorks;
GO
SELECT c.FirstName, c.LastName
,ROW_NUMBER() OVER(ORDER BY SalesYTD DESC) AS 'Row Number'
,s.SalesYTD, a.PostalCode
FROM Sales.SalesPerson s
INNER JOIN Person.Contact c
ON s.SalesPersonID = c.ContactID
INNER JOIN Person.Address a
ON a.AddressID = c.ContactID
WHERE TerritoryID IS NOT NULL
AND SalesYTD <> 0;
L'exemple suivant retourne les lignes dont le numéro est compris entre 50
et 60
inclus, dans l'ordre de OrderDate
.
USE AdventureWorks;
GO
WITH OrderedOrders AS
(
SELECT SalesOrderID, OrderDate,
ROW_NUMBER() OVER (ORDER BY OrderDate) AS 'RowNumber'
FROM Sales.SalesOrderHeader
)
SELECT *
FROM OrderedOrders
WHERE RowNumber BETWEEN 50 AND 60;
L'exemple suivant illustre l'utilisation de l'argument PARTITION BY
.
USE AdventureWorks;
GO
SELECT c.FirstName, c.LastName
,ROW_NUMBER() OVER
(PARTITION BY PostalCode ORDER BY SalesYTD DESC) AS 'Row Number'
,s.SalesYTD, a.PostalCode
FROM Sales.SalesPerson s
INNER JOIN Person.Contact c
ON s.SalesPersonID = c.ContactID
INNER JOIN Person.Address a
ON a.AddressID = c.ContactID
WHERE TerritoryID IS NOT NULL
AND SalesYTD <> 0;
Historique des modifications
Version | Historique |
---|---|
17 juillet 2006 |
|
Voir aussi
Référence
RANK (Transact-SQL)
DENSE_RANK (Transact-SQL)
NTILE (Transact-SQL)
Fonctions de classement (Transact-SQL)
Fonctions (Transact-SQL)