#mysql #sql #select #case
#mysql #sql #выберите #регистр
Вопрос:
У меня есть образец кода SQL, который возвращает количество недель
,CASE WHEN dateadd(MONTH, datediff (MONTH,AgentStart, getdate()), AgentStart) > getdate()
THEN datediff(MONTH, AgentStart, getdate()) - 1
ELSE datediff(MONTH, AgentStart, getdate())
END as 'Month'
Я не думаю о том, как теперь я могу добавить новый столбец, который даст мне этот результат (из той же таблицы).:
,CASE WHEN **MONTH FROM CASE STATEMENT ABOVE** BETWEEN 0 AND 3 THEN 'Youngest'
WHEN **MONTH FROM CASE STATEMENT ABOVE** BETWEEN 4 AND 5 THEN 'Young'
WHEN **MONTH FROM CASE STATEMENT ABOVE** BETWEEN 6 AND 11 THEN 'Medium'
ELSE 'Old'
END AS "Status"
Комментарии:
1. Это выражения падежа, а не утверждения.
2. Используйте cte или производную таблицу для первого шага, затем примените второй шаг к его результату.
3. Пожалуйста, предоставьте свой полный запрос.
Ответ №1:
Вы могли бы использовать подзапрос:
SELECT `month`,
CASE WHEN `month` BETWEEN 0 AND 3 THEN 'Youngest'
WHEN `month` BETWEEN 4 AND 5 THEN 'Young'
WHEN `month` BETWEEN 6 AND 11 THEN 'Medium'
ELSE 'Old'
END AS Status
FROM (SELECT CASE
WHEN dateadd(MONTH, datediff (MONTH,AgentStart, getdate()), AgentStart) > getdate()
THEN datediff(MONTH, AgentStart, getdate()) - 1
ELSE datediff(MONTH, AgentStart, getdate())
END as `Month`
FROM mytable) t
Ответ №2:
Вы можете написать встроенное представление, чтобы сделать это
Например:
select case WHEN x.month_value BETWEEN 0 AND 3 THEN 'Youngest'
WHEN x.month_value BETWEEN 4 AND 5 THEN 'Young'
WHEN x.month_value BETWEEN 6 AND 11 THEN 'Medium'
ELSE 'Old'
END AS "Status"
,--rest of the columns from the inner query...
from (
select CASE
WHEN dateadd(MONTH, datediff (MONTH,AgentStart, getdate()), AgentStart) > getdate()
THEN datediff(MONTH, AgentStart, getdate()) - 1
ELSE datediff(MONTH, AgentStart, getdate())
END as month_value --naming it as month_value
from <table>
)x