2014-09-25 10 views
6

aus meiner früheren Frage hier Case statement for Order By clause with Desc/Asc sort Im Anschluss an habe ich eine Anweisung wie folgt:CASE-Anweisung für ORDER BY-Klausel mit mehreren Spalten und Desc/Asc Sortieren

SELECT 
    * 
FROM 
    TableName 
WHERE 
ORDER BY 
    CASE @OrderByColumn WHEN 1 THEN Forename END DESC, 
    CASE @OrderByColumnWHEN 2 THEN Surname END ASC 

Das funktioniert gut, aber manchmal brauche ich mehr als Spalte in der Reihenfolge von. Ich brauche eigentlich so etwas wie diese:

..... 
ORDER BY 
    CASE @OrderByColumn WHEN 1 THEN Forename, Date, Location END DESC 

Ich kann aus nicht funktionieren, wie die CASE Anweisung mehr Spalten in dem THEN Teil erlauben zu machen.

Antwort

8

Brauchst du das?

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

Sie können mehrere Fälle schreiben, auch wenn alle denselben Zustand haben.

ORDER BY 
    CASE @OrderByColumn WHEN 1 THEN Forename END DESC, 
    CASE @OrderByColumn WHEN 1 THEN Date END DESC, 
    CASE @OrderByColumn WHEN 1 THEN Location END DESC, 
    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, bedeutet es so tatsächlich:

CASE @OrderByColumn WHEN 1 THEN Forename ELSE NULL END 

Also, wenn @OrderByColumn nicht 1 ist dann immer NULL die Anweisung gibt. Das schließt es übrigens nicht aus der Sortierung aus, aber es fügt alle diese Zeilen im Ergebnis zusammen und macht 'SurName' zur entscheidenden Sortierung mit dieser Gruppe von Zeilen.

Verwandte Themen