Beim ORDER BY die NULL am Ende

Wenn man die Ausgabe nach einer bestimmten Spalte sortieren will, kommt es manchmal vor, dass in den Daten NULLs enthalten sind.

Zur Vorbereitung erstellen wir uns eine kleine temporäre Tabelle mit einer Spalte und drei Zeilen:

SELECT NULL AS Spalte1
INTO #test
UNION ALL
SELECT 'abc'
UNION ALL
SELECT 'def'

Dann nehmen wir folgenden Select-Befehl um eine sortierte Ausgabe zu erzeugen:

SELECT Spalte1
FROM #test
ORDER BY Spalte1

Es wird eine Ausgabe erzeugt, bei der die Zeile mit NULL als erstes ausgegeben wird:


Nicht immer möchte man jedoch die NULLs am Anfang stehen haben. Trotzdem soll eine aufsteigende Sortierung der Werte stattfinden. Wie kann man das Problem lösen? Die Lösung ist die Anpassung des Sortierkriteriums. Anstatt nur nach Spalte1 zu sortieren, kann man dort die ISNULL-Funktion verwenden:

SELECT Spalte1
FROM #test
ORDER BY ISNULL(Spalte1, 'zzzzz')

Die Ausgabe enthält die gewünschte Reihenfolge:

Mit der Funktion wird folgendes erreicht. Falls eine NULL auftritt, dann wird diese ans Ende verschoben (zzzzz). Ansonsten wird nach Spalte1 sortiert. Diese Regel wird aber nur für die Sortierung verwendet, hat jedoch keinen Einfluss auf die Ausgabe.
Für den praktischen Einsatz ist zu beachten, dass der Wert, in den NULL umgewandelt wird, vom Datentyp abhängt. Möchte man Zahlen sortieren, dann ist als Wert statt zzzzz eine große Zahl (z.B. 999999999) anzugeben.
Und schon haben wir unser Sortierproblem gelöst.