Ответ 1
Вам это нужно?
ORDER BY
CASE @OrderByColumn WHEN 1 THEN Forename END DESC, Date, Location,
CASE @OrderByColumn WHEN 2 THEN Surname END ASC
Следуя моему предыдущему вопросу здесь Оператор case для предложения Order By с сортировкой Desc/Asc У меня есть инструкция вроде этого:
SELECT
*
FROM
TableName
WHERE
ORDER BY
CASE @OrderByColumn WHEN 1 THEN Forename END DESC,
CASE @OrderByColumnWHEN 2 THEN Surname END ASC
Это работает хорошо, но иногда мне нужно больше, чем столбец в порядке. Мне действительно нужно что-то вроде этого:
.....
ORDER BY
CASE @OrderByColumn WHEN 1 THEN Forename, Date, Location END DESC
Я не могу понять, как сделать оператор CASE
разрешить несколько столбцов в части THEN
.
Вам это нужно?
ORDER BY
CASE @OrderByColumn WHEN 1 THEN Forename END DESC, Date, Location,
CASE @OrderByColumn WHEN 2 THEN Surname END ASC
Вы можете написать несколько случаев, даже если они все имеют одинаковое условие.
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
На самом деле вы указываете не столбец для сортировки, а выражение.
Оператор case возвращает ноль, если условие не выполняется, поэтому на самом деле это означает:
CASE @OrderByColumn WHEN 1 THEN Forename ELSE NULL END
Так что если @OrderByColumn не равно 1, то оператор всегда возвращает NULL. Между прочим, это не исключает его из сортировки, но объединяет все эти строки в результате, делая SurName решающей сортировкой в этой группе строк.