ORDER BY-Klausel (Transact-SQL)

Legt die Sortierreihenfolge für Spalten fest, die von einer SELECT-Anweisung zurückgegeben werden. Die ORDER BY-Klausel ist in Sichten, Inlinefunktionen, abgeleiteten Tabellen und Unterabfragen nur dann gültig, wenn auch TOP angegeben wird.

HinweisHinweis

Wenn ORDER BY in der Definition einer Sicht, einer Inlinefunktion, einer abgeleiteten Tabelle oder Unterabfrage verwendet wird, dient die Klausel lediglich zur Bestimmung der Zeilen, die von der TOP-Klausel zurückgegeben werden. Durch die ORDER BY-Klausel wird keine bestimmte Ergebnisreihenfolge bei der Abfrage dieser Konstrukte sichergestellt, es sei denn, in der Abfrage selbst ist ebenfalls ORDER BY angegeben.

Themenlink (Symbol)Transact-SQL-Syntaxkonventionen

Syntax

[ ORDER BY 
    {
    order_by_expression 
  [ COLLATE collation_name ] 
  [ ASC | DESC ] 
    } [ ,...n ] 
] 

Argumente

  • order_by_expression
    Gibt eine Spalte an, nach der sortiert werden soll. Eine Sortierspalte kann als Name, Spaltenalias oder eine nicht negative ganze Zahl angegeben werden, die die Position des Namens oder Alias in der Auswahlliste darstellt. Eine ganze Zahl kann nicht angegeben werden, wenn order_by_expression in einer Rangfolgefunktion angezeigt wird. Eine Sortierspalte kann einen Ausdruck enthalten. Wenn die Datenbank sich jedoch im SQL Server-Kompatibilitätsmodus (90) befindet, kann der Ausdruck nicht in eine Konstante aufgelöst werden. Spaltennamen und Aliase können durch den Namen der Tabelle oder Sicht qualifiziert werden. In SQL Server werden qualifizierte Spaltennamen und Aliase in Spalten aufgelöst, die in der FROM-Klausel aufgeführt sind. Wenn order_by_expression nicht qualifiziert wird, muss der Wert unter allen in der SELECT-Anweisung aufgelisteten Spalten eindeutig sein.

    Es können mehrere Sortierspalten angegeben werden. Die Reihenfolge der Sortierspalten in der ORDER BY-Klausel definiert die Anordnung des sortierten Resultsets.

    Die ORDER BY-Klausel kann Elemente enthalten, die nicht in der Auswahlliste angezeigt werden. Wenn jedoch SELECT DISTINCT angegeben wird oder die Anweisung eine GROUP BY-Klausel oder die SELECT-Anweisung einen UNION-Operator enthält, müssen die Sortierspalten in der Auswahlliste angezeigt werden.

    Enthält die SELECT-Anweisung einen UNION-Operator, gilt außerdem, dass als Spaltennamen oder Spaltenaliasnamen die in der ersten Auswahlliste angegebenen Namen verwendet werden müssen.

    HinweisHinweis

    Spalten vom Typ ntext, text, image oder xml können in einer ORDER BY-Klausel nicht verwendet werden.

  • COLLATE {collation_name}
    Gibt an, dass der ORDER BY-Vorgang gemäß der in collation_name angegebenen Sortierung und nicht gemäß der in der Tabelle oder Sicht definierten Sortierung der Spalte ausgeführt werden soll. collation_name kann entweder der Name einer Windows-Sortierreihenfolge oder ein SQL-Sortierungsname sein. Weitere Informationen finden Sie unter Sortierungseinstellungen im Setup-Programm und Verwenden von SQL Server-Sortierungen. COLLATE ist nur für Spalten der Datentypen char, varchar, nchar und nvarchar anwendbar.

  • ASC
    Gibt an, dass die Werte in der angegebenen Spalte in aufsteigender Reihenfolge vom niedrigsten bis zum höchsten Wert sortiert werden sollen. ASC ist die Standardsortierung.

  • DESC
    Gibt an, dass die Werte in der angegebenen Spalte in absteigender Reihenfolge vom höchsten bis zum niedrigsten Wert sortiert werden sollen.

Hinweise

NULL-Werte werden als die niedrigsten Werte behandelt, die möglich sind.

Für die Anzahl der Elemente in der ORDER BY-Klausel gibt es keine Beschränkung. Allerdings ist die Zeilengröße der für Sortiervorgänge benötigten temporären Arbeitstabellen auf 8.060 Byte beschränkt. Hierdurch wird die Gesamtgröße der in einer ORDER BY-Klausel angegebenen Spalten beschränkt.

Wenn sie zusammen mit einer SELECT...INTO-Anweisung zum Einfügen von Zeilen aus einer anderen Quelle verwendet wird, garantiert die ORDER BY-Klausel nicht, dass die Zeilen in der angegebenen Reihenfolge eingefügt werden.

Beispiele

In den folgenden Beispielen wird das Sortieren eines Resultsets veranschaulicht.

Sortieren nach der numerischen ProductID-Spalte. Standardmäßig wird eine aufsteigende Sortierreihenfolge verwendet.

USE AdventureWorks2008R2;
GO
SELECT ProductID, Name FROM Production.Product
WHERE Name LIKE 'Lock Washer%'
ORDER BY ProductID ;

Sortieren nach der numerischen ProductID-Spalte in absteigender Reihenfolge.

SELECT ProductID, Name FROM Production.Product
WHERE Name LIKE 'Lock Washer%'
ORDER BY ProductID DESC;

Sortieren nach der Name-Spalte. Beachten Sie, dass die Zeichen alphabetisch und nicht numerisch sortiert sind. Das heißt, 10 steht in der Sortierreihenfolge vor 2.

SELECT ProductID, Name FROM Production.Product
WHERE Name LIKE 'Lock Washer%'
ORDER BY Name ASC ;

Sortieren nach zwei Spalten. In dieser Abfrage wird zuerst nach der FirstName-Spalte in aufsteigender Reihenfolge und anschließend nach der LastName-Spalte in absteigender Reihenfolge sortiert.

SELECT LastName, FirstName FROM Person.Person
WHERE LastName LIKE 'R%'
ORDER BY FirstName ASC, LastName DESC ;