Как выбрать псевдоним в качестве значения столбца «date1»? Я хочу выбрать псевдоним, который будет отображать формат месяца и года, например «18 января». MySQL версии 5.0. Я пробовал это, но не сработало:
SUM(CASE WHEN MONTH(date1) = 1 THEN quantity/1000 ELSE NULL END) AS date1
Мой запрос:
SELECT
SUM(CASE WHEN MONTH(date1) = 1 THEN quantity/1000 ELSE NULL END) AS jan
,SUM(CASE WHEN MONTH(date1) = 2 THEN quantity/1000 ELSE NULL END) AS feb
,SUM(CASE WHEN MONTH(date1) = 3 THEN quantity/1000 ELSE NULL END) AS mar
,SUM(CASE WHEN MONTH(date1) = 4 THEN quantity/1000 ELSE NULL END) AS apr
,SUM(CASE WHEN MONTH(date1) = 5 THEN quantity/1000 ELSE NULL END) AS may
,SUM(CASE WHEN MONTH(date1) = 6 THEN quantity/1000 ELSE NULL END) AS jun
,SUM(CASE WHEN MONTH(date1) = 7 THEN quantity/1000 ELSE NULL END) AS jul
,SUM(CASE WHEN MONTH(date1) = 8 THEN quantity/1000 ELSE NULL END) AS aug
,SUM(CASE WHEN MONTH(date1) = 9 THEN quantity/1000 ELSE NULL END) AS sep
,SUM(CASE WHEN MONTH(date1) = 10 THEN quantity/1000 ELSE NULL END) AS octo
,SUM(CASE WHEN MONTH(date1) = 11 THEN quantity/1000 ELSE NULL END) AS nov
,SUM(CASE WHEN MONTH(date1) = 12 THEN quantity/1000 ELSE NULL END) AS dece
FROM
data2
WHERE
date1 >= DATE_SUB('2018-09-11', INTERVAL 11 MONTH) AND date1 <= DATE_FORMAT('2018-09-11', '%Y-%m-31')
GROUP BY unit
I tried this but didnt work
... Какие не работал? Вы забыли включить это в свой вопрос. Ваш запрос определенно выглядит так, как будто он должен выполнять что-то. Включите образцы входных и выходных данных для достижения наилучших результатов.
Вы можете либо жестко закодировать его, например, «18 января» (включая кавычки), либо создать код для отправки с помощью подготовленного оператора. Кстати, этот запрос может завершиться неудачно, если установлен only_full_group_by (dev.mysql.com/doc/refman/8.0/en/group-by-handling.html)
@ P.Salmon Я не понимаю, почему запрос должен завершиться неудачно из-за только полной группы по. Почему ты так думаешь?
Привет, спасибо за ответ, я просто хочу использовать псевдоним «jan», «feb» и т. д. Как значение столбца «date1», чтобы всякий раз, когда я передаю параметр даты, он отображал такой формат, как «18 января», «18 февраля» и и т. д. По возможности я старался избегать жесткого кода, потому что некоторые данные включают записи за предыдущий год.
Короткий ответ: нет, если вы динамически не генерируете свой оператор SQL, вы не можете использовать значение столбца в качестве значения псевдонима в своем запросе.
sum(case when expression = true then 100 else 0 end) -- this will work fine
sum(case when expression = true then 100 else null end) -- this will also work -
but gives you nulls even
if there is one row
where the expression is
false
Похоже, вы хотите выполнить подзапрос, но у вас есть довольно длинный внутренний запрос, в котором каждая запись в таблицах заблокирована для чтения, поэтому ваша БД может вас выгнать. Возможно, вам удастся избежать этого, выполнив два разных запроса в хранимой процедуре, иначе выполните два отдельных запроса в своей бизнес-логике.