Вопрос

Используя блок. [status] ASC, [date] DESC или просто [date] DESC.

Я знаю только как использовать один столбец:

SELECT *
FROM table
ORDER BY
    CASE WHEN @flag = 0
        THEN R.[date] END DESC,
    CASE WHEN @flag = 1
        THEN R.[status] END ASC

Как использовать оба столбца во втором случае?

Это было полезно?

Решение

  • Если ваш флаг равен 0, то мы закажем (null, r.date desc).
  • Если нет, мы заказываем (R.Status, R.Date Desc)

Используйте выражение корпуса для «Проектирования» нового значения для заказа.

SELECT *
FROM table
ORDER BY
  CASE WHEN @flag = 0 THEN r.Status ELSE null END,
  r.[date] desc

Другие советы

Как правило, для положения условного упорядочения, вы просто повторяете оператор дела.

SELECT *
FROM table
ORDER BY
    CASE WHEN @flag = 0 THEN R.[date] END DESC,
    CASE WHEN @flag = 0 THEN R.[somethingelse] END ASC,
    CASE WHEN @flag = 1 THEN R.[status] END ASC
;

Но в вашем случае перекрытие «даты» означает, что вы можете упростить его, как комментарий Дэвида Б.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top