Я хочу использовать следующий SQL:
SELECT * FROM Data WHERE tid=1 ORDER BY CASE WHEN round=0 THEN date ELSE round, date END ASC
но это не работает из-за round, date
бита round, date
. Работает хорошо, если я делаю что битную round
, например, но не с обоими.
Если round=0
то я хочу, чтобы сортировать по возрастанию по round
сначала, а затем по date
. Это возможно?
То, что я пытаюсь достичь отсортированный массив строк, которые сортируют на round
первое затем date
второго. Но если round
равен нулю, я просто хочу, чтобы эта строка появлялась между датами, в которые была бы записана эта запись, даже если бы она имела нулевое round
значение.
Можно использовать пару случаев, когда один для каждого столбца
SELECT *
FROM Data
WHERE tid=1
ORDER BY ( CASE WHEN round= 0 THEN date ELSE round END) ASC ,
( CASE WHEN round= 0 THEN NULL ELSE date END) ASC
Выражение case
возвращает только одно значение. Если сначала нужны строки с round = 0
, то вы можете сделать:
ORDER BY (CASE WHEN round = 0 THEN 1 ELSE 2 END),
round, date
Это можно сократить до:
ORDER BY (round = 0) DESC, round, date
Тем не менее, я не уверен на 100%, что вы действительно хотите.
Если round
принимает только два значения, ваш вопрос будет иметь больше смысла. В этом случае вы действительно хотите сначала сортировать по date
:
ORDER BY date, round;
Однако это предположение о том, как выглядят ценности данных.
round
может иметь любое значение.