Możesz napisać wiele spraw, 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,
CASE @OrderByColumn WHEN 1 THEN Location END,
CASE @OrderByColumn WHEN 2 THEN Surname END ASC
W rzeczywistości nie określasz kolumny, według której ma odbywać się sortowanie, ale wyrażenie.
Instrukcja case zwraca wartość null, jeśli warunek nie jest spełniony, więc w rzeczywistości oznacza to:
CASE @OrderByColumn WHEN 1 THEN Forename ELSE NULL END
Więc jeśli @OrderByColumn nie jest 1, instrukcja zwraca zawsze NULL. Nawiasem mówiąc, to nie wyklucza go z sortowania, ale umieszcza wszystkie te wiersze razem w wyniku, dzięki czemu „Nazwisko” jest decydującym sortowaniem w tej grupie wierszy.