У вас правильная идея, но вам просто нужно немного изменить способ, которым ваш CASE
работает:
ORDER BY
CASE WHEN @IsDescOrder = 1 THEN DateKey ELSE '' END DESC,
CASE WHEN @IsDescOrder = 0 THEN DateKey ELSE '' END ASC
Это содержит два предложения для упорядочения: предложение в порядке убывания, затем в порядке возрастания.
Когда @IsDescOrder
равен 1, используется нисходящее предложение, в противном случае - восходящее.Предоставляя ELSE ''
, это обеспечивает эффективное игнорирование нежелательного заказа (ASC
или DESC
).
EDIT
Как указано в OP, это вызвало ошибку, если столбец заказа был числовым.Чтобы решить эту проблему, замените пустую строку (''
) на 0
:
ORDER BY
CASE WHEN @IsDescOrder = 1 THEN DateKey ELSE 0 END DESC,
CASE WHEN @IsDescOrder = 0 THEN DateKey ELSE 0 END ASC
Это работает так же, как решение с пустой строкой, но предотвращает ошибку преобразования типов при использовании числовыхстолбцы.