Tri des lignes à l'aide de ORDER BY

La clause ORDER BY trie les résultats d'une requête sur une ou plusieurs colonnes à hauteur de 8 060 octets. Pour plus d'informations sur la taille maximale de la clause ORDER BY, consultez Clause ORDER BY (Transact-SQL).

Depuis MicrosoftSQL Server 2005, SQL Server vous permet de spécifier le classement des colonnes des tables de la clause FROM qui ne sont pas spécifiées dans la liste SELECT. Les noms de colonnes référencés dans la clause ORDER BY doivent correspondre à ceux de colonnes de la liste SELECT ou de la table dans la clause FROM et ce, sans ambiguité. Si les noms de colonnes dans la liste SELECT sont des alias, seuls ces alias peuvent être utilisés dans la clause ORDER BY. De même, si les noms de tables sont des alias des noms de la clause FROM, seuls ces alias peuvent être utilisés pour qualifier leurs colonnes dans la clause ORDER BY.

Un tri est effectué dans l'ordre croissant (ASC) ou décroissant (DESC). Si l'ordre de tri n'est pas spécifié, le tri par défaut est croissant.

La requête suivante retourne des résultats triés par ProductID dans l'ordre croissant :

USE AdventureWorks;
GO
SELECT ProductID, ProductLine, ProductModelID
FROM Production.Product
ORDER BY ProductID

Si vous spécifiez plusieurs colonnes dans la clause ORDER BY, les tris sont imbriqués. L'instruction suivante trie les lignes de la table Production.Product, d'abord par sous-catégorie de produits dans l'ordre décroissant, puis par ListPrice dans l'ordre croissant dans chaque sous-catégorie de produits.

USE AdventureWorks;
GO
SELECT ProductID, ProductSubcategoryID, ListPrice
FROM Production.Product
ORDER BY ProductSubcategoryID DESC, ListPrice

Les résultats exacts d'une clause ORDER BY dépendent du classement des colonnes ordonnées. Pour plus d'informations, consultez Utilisation des classements. Pour les colonnes char, varchar, nchar et nvarchar, vous pouvez spécifier que l'opération ORDER BY soit effectuée selon un classement différent de celui de la colonne tel qu'il est défini dans la table ou la vue. Vous pouvez spécifier un nom de classement Windows ou SQL. Par exemple, la colonne LastName de la table Person.Contact de la base de données AdventureWorks est définie avec le classement Latin1_General, mais dans le script ci-dessous, elle est retournée par ordre croissant au moyen du classement Traditional_Spanish.

USE AdventureWorks;
GO
SELECT LastName FROM Person.Contact
ORDER BY LastName
COLLATE Traditional_Spanish_ci_ai ASC
GO

Vous ne pouvez pas utiliser ORDER BY pour des colonnes de type text, ntext, image ou xml. En outre, les sous-requêtes, les agrégats et les expressions constantes ne sont pas autorisés dans la liste ORDER BY. Vous pouvez toutefois utiliser un nom spécifié par l'utilisateur dans la liste de sélection pour les agrégats et les expressions. Exemple :

SELECT Color, AVG (ListPrice) AS 'average list price'
FROM Production.Product
GROUP BY Color
ORDER BY 'average list price'

La clause ORDER BY garantit un résultat trié uniquement pour l'instruction SELECT qui se trouve le plus à l'extérieur d'une requête. Par exemple, créez la définition de vue suivante :

CREATE VIEW TopView AS 
SELECT TOP 50 PERCENT * FROM Person.Contact       
ORDER BY LastName       

Puis interrogez la vue comme suit :

SELECT * FROM TopView       

Bien que la définition de la vue contienne une clause ORDER BY, celle-ci est utilisée uniquement pour déterminer les lignes retournées par la clause TOP. Lors de l'interrogation de la vue en elle-même, SQL Server ne garantit pas que les résultats seront ordonnés, sauf si vous l'indiquez de façon explicite comme illustré dans la requête suivante :

SELECT * FROM TopView       
ORDER BY LastName       

Voir aussi

Concepts