Я пытаюсь поставить пару операторов if внутри CASE WHERE в выбранном запросе для управления порядком. Это упрощенная версия, которая все еще дает мне синтаксическую ошибку.MySQL IF внутри оператора SWITCH CASE
SELECT stt_stid, st_stid, st_prid, st_first, st_last, YEAR(st_graduation)
FROM sttlink
INNER JOIN student ON stt_stid = st_stid
WHERE stt_prid = 3920103
GROUP BY stt_stid
ORDER BY
CASE
WHEN (MONTH(now())>='9')
THEN
if(YEAR(st_graduation) = YEAR(now()), 0, 1),
st_graduation
WHEN (MONTH(now())<'9')
THEN
if(YEAR(st_graduation) >= YEAR(now()), 1, 0),
st_graduation
END;
И сообщение об ошибке (Navicat) является:
[Err] 1064 - You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near '
st_graduation
WHEN (MONTH(now())<'9')
THEN
' at line 13
Вот еще материал (спасибо за глядя так далеко!). Это моя оригинальная рабочая версия. Проблема в том, что мне нужно иметь два разных порядка: - в месяц - сентябрь-декабрь, а другой - за январь-август.
ORDER BY if(YEAR(st_graduation)>=YEAR(now()), 0, 1),
if(YEAR(st_graduation)>=YEAR(now()), 10000, datediff(now(),st_graduation)),
st_graduation
Вышеупомянутые работы прекрасно, если это январь-август, но мне нужно немного другое в течение месяцев сентября-декабря.
Ответ Рахула очень близок. Теперь я вплоть до 2-й случай внутри высказыванием:
ORDER BY
CASE
WHEN (MONTH(now()) >= '9')
THEN
CASE WHEN YEAR(st_graduation) = YEAR(now()) THEN 0 ELSE 1 END,
CASE WHEN YEAR(st_graduation) = YEAR(now()) THEN 10000 ELSE (datediff(now(),st_graduation)) END
WHEN (MONTH(now()) < '9')
THEN
CASE WHEN YEAR(st_graduation) >= YEAR(now()) THEN 1 ELSE 0 END,
CASE WHEN YEAR(st_graduation) = YEAR(now()) THEN 10000 ELSE (datediff(now(),st_graduation)) END
END, st_graduation;
Должен ли я создать 2-й отдельный «главный» случай/когда - то же самое, когда положения, но только с 2-го заявления дела?
' синтаксическая ошибка'? –
опубликуйте образец данных и ожидаемый результат. Что вы пытаетесь достичь? – Alex