Share via


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 SQL 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 AdventureWorks2008R2;
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 AdventureWorks2008R2;
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.Person de la base de données AdventureWorks2008R2 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 AdventureWorks2008R2;
GO
SELECT LastName FROM Person.Person
ORDER BY LastName
COLLATE Traditional_Spanish_ci_ai ASC;
GO

Vous ne pouvez pas utiliser ORDER BY pour des colonnes de type de données text, ntext, image ou xml.

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