2014-09-25 13 views
6

Nawiązując do mojego wcześniejszego pytania tutaj Case statement for Order By clause with Desc/Asc sort Mam oświadczenie takiego:case dla klauzuli ORDER BY z wielu kolumn i Desc/Asc Sortuj

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

to działa dobrze, ale czasami muszę więcej niż kolumny w kolejności według. I rzeczywiście trzeba coś takiego:

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

nie mogę pracować się, jak zrobić zestawienie CASE pozwalają wielu kolumn w THEN części.

Odpowiedz

8

Potrzebujesz tego?

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

Można pisać wiele przypadków, nawet jeśli wszystkie mają ten sam warunek.

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 

W rzeczywistości nie określa się kolumny do sortowania według, ale wyrażenia.

Sprawa instrukcja zwraca null, jeśli warunek nie jest spełniony, to tak naprawdę oznacza:

CASE @OrderByColumn WHEN 1 THEN Forename ELSE NULL END 

Więc jeśli @OrderByColumn nie jest 1 następnie powróci komunikat zawsze NULL. To nie wyklucza tego z sortowania, nawiasem mówiąc, ale umieszcza wszystkie te wiersze w wyniku, czyniąc "SurName" decydującym sortowaniem dla tej grupy rzędów.