Sortieren von Zeilen mit ORDER BY

Die ORDER BY-Klausel sortiert Abfrageergebnisse nach einer oder mehreren Spalten bis zu 8.060 Byte. Weitere Informationen zur maximalen ORDER BY-Klauselgröße finden Sie unter ORDER BY-Klausel (Transact-SQL).

Ab SQL Server 2005 können in SQL Server Sortierspalten aus Tabellen in der FROM-Klausel angegeben werden, die nicht in der SELECT-Liste angegeben sind. Die Spaltennamen, auf die in der ORDER BY-Klausel verwiesen wird, müssen entweder einer Spalte in der SELECT-Liste oder einer Spalte aus der Tabelle in der FROM-Klausel entsprechen, ohne dass dabei irgendwelche Zweideutigkeiten zulässig sind. Wenn Spaltennamen in der SELECT-Liste ein Alias zugeordnet ist, kann in der ORDER BY-Klausel nur der Aliasname verwendet werden. Desgleichen gilt: Wenn Tabellennamen in der FROM-Klausel ein Alias zugeordnet ist, können nur die Aliasnamen verwendet werden, um ihre Spalten in der ORDER BY-Klausel anzugeben.

Die Sortierreihenfolge kann aufsteigend (ASC) oder absteigend (DESC) sein. Ohne eine Angabe wird von ASC ausgegangen.

Die folgende Abfrage gibt Ergebnisse zurück, die nach den Werten in der ProductID-Spalte in aufsteigender Reihenfolge sortiert sind.

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

Werden in der ORDER BY-Klausel mehrere Spalten angegeben, wird geschachtelt sortiert. Mit der folgenden Anweisung werden die Zeilen in der Production.Product-Tabelle sortiert, und zwar zunächst in absteigender Reihenfolge nach der Produktunterkategorie (ProductSubcategory) und dann innerhalb jeder Produktunterkategorie in aufsteigender Reihenfolge nach dem Listenpreis (ListPrice).

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

Die exakten Ergebnisse einer ORDER BY-Klausel richten sich nach der Sortierung der sortierten Spalten. Weitere Informationen finden Sie unter Arbeiten mit Sortierungen. Für Spalten mit den Datentypen char, varchar, nchar und nvarchar können Sie angeben, dass ein ORDER BY-Vorgang entsprechend einer Sortierung durchgeführt wird, die von der Sortierung der Spalte laut Definition in der Tabelle oder Sicht abweicht. Sie können dabei einen Windows-Sortiernamen oder einen SQL-Sortiernamen angeben. So ist z. B. die LastName-Spalte in der Person.Person-Tabelle der AdventureWorks2008R2-Datenbank mit der Sortierung Latin1_General definiert, im unten gezeigten Skript wird die Spalte jedoch in aufsteigender Reihenfolge mit der Sortierung Traditional_Spanish zurückgegeben.

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

Sie können ORDER BY nicht auf Spalten anwenden, die den Datentyp text, ntext, image oder xml haben.

ORDER BY garantiert ein sortiertes Ergebnis nur für die äußerste SELECT-Anweisung einer Abfrage. Nehmen Sie z. B. die folgende Definition einer Sicht an:

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

Anschließend erfolgt eine Abfrage für die Sicht:

SELECT * FROM TopView;       

Obwohl die Definition der Sicht eine ORDER BY-Klausel enthält, wird diese ORDER BY-Klausel lediglich zur Ermittlung der Zeilen verwendet, die von der TOP-Klausel zurückgegeben werden. Wenn die Sicht als solche abgefragt wird, sortiert SQL Server die Ergebnisse nur, wenn Sie dies explizit festlegen, was in der folgenden Abfrage gezeigt wird:

SELECT * FROM TopView       
ORDER BY LastName;