Sqlserver
 sql >> Datenbank >  >> RDS >> Sqlserver

CASE-Anweisung für Order By-Klausel mit mehreren Spalten und Desc/Asc-Sortierung

Sie können mehrere Fälle schreiben, auch wenn sie alle dieselbe Bedingung haben.

ORDER BY 
    CASE @OrderByColumn WHEN 1 THEN Forename END DESC, 
    CASE @OrderByColumn WHEN 1 THEN Date END, 
    CASE @OrderByColumn WHEN 1 THEN Location END, 
    CASE @OrderByColumn WHEN 2 THEN Surname END ASC 

Eigentlich geben Sie keine Spalte an, nach der sortiert werden soll, sondern einen Ausdruck.

Die case-Anweisung gibt null zurück, wenn die Bedingung nicht erfüllt ist, also bedeutet sie eigentlich:

CASE @OrderByColumn WHEN 1 THEN Forename ELSE NULL END

Wenn also @OrderByColumn nicht 1 ist, gibt die Anweisung immer NULL zurück. Das schließt es übrigens nicht von der Sortierung aus, aber es fügt all diese Zeilen im Ergebnis zusammen und macht 'Nachname' zur entscheidenden Sortierung innerhalb dieser Gruppe von Zeilen.