MSSQL В списке ORDER BY, позиция 1, обнаружено постоянное выражение - PullRequest
0 голосов
/ 14 марта 2019

Проблема:

Это запрос, который должен сортировать таблицу, он работает нормально, если по крайней мере одно значение в столбце "архивированный" не равно нулю, но в моем случае возможно и допустимо, чтобывсе значения в архивируемом столбце могут быть нулевыми.

Если хотя бы одно значение не является нулевым, оно должно быть отсортировано.

Sample1 (works):

id|Archived
0 |NULL
1 |NULL
2 |0
3 |1

Пример 2 (не работает, но возможен и действителен сценарий):

id|Archived
0 |NULL
1 |NULL
2 |NULL
3 |NULL

Пример запроса:

SELECT ... FROM Table1 
   ORDER BY 
      CASE archived WHEN NULL THEN 1 ELSE 0 END DESC,
      CASE id WHEN NULL THEN 0 ELSE 1 END DESC

Как решить такие проблемы?

Ответы [ 2 ]

0 голосов
/ 14 марта 2019

Из рабочего примера я не думаю, что вы хотите отсортировать данные по убыванию, верно?

SELECT ... FROM Table1 
   ORDER BY 
      CASE WHEN archived IS NULL THEN -1 ELSE archived END,
      CASE WHEN id IS NULL THEN -1 ELSE id END
0 голосов
/ 14 марта 2019

Вы не можете использовать этот формат оператора CASE в ORDER BY.Вместо этого вы можете сделать это:

SELECT ... FROM Table1 
   ORDER BY 
      CASE WHEN archived IS NULL THEN 1 ELSE 0 END DESC,
      CASE WHEN id IS NULL THEN 0 ELSE 1 END DESC
...