Mysql использование псевдонима в качестве столбца в случае, когда

Как выбрать псевдоним в качестве значения столбца «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

Похоже, вы хотите выполнить подзапрос, но у вас есть довольно длинный внутренний запрос, в котором каждая запись в таблицах заблокирована для чтения, поэтому ваша БД может вас выгнать. Возможно, вам удастся избежать этого, выполнив два разных запроса в хранимой процедуре, иначе выполните два отдельных запроса в своей бизнес-логике.

awiebe 26.10.2018 03:50
I tried this but didnt work ... Какие не работал? Вы забыли включить это в свой вопрос. Ваш запрос определенно выглядит так, как будто он должен выполнять что-то. Включите образцы входных и выходных данных для достижения наилучших результатов.
Tim Biegeleisen 26.10.2018 03:56

Вы можете либо жестко закодировать его, например, «18 января» (включая кавычки), либо создать код для отправки с помощью подготовленного оператора. Кстати, этот запрос может завершиться неудачно, если установлен only_full_group_by (dev.mysql.com/doc/refman/8.0/en/group-by-handling.html)

P.Salmon 26.10.2018 04:03

@ P.Salmon Я не понимаю, почему запрос должен завершиться неудачно из-за только полной группы по. Почему ты так думаешь?

Tim Biegeleisen 26.10.2018 04:07

Привет, спасибо за ответ, я просто хочу использовать псевдоним «jan», «feb» и т. д. Как значение столбца «date1», чтобы всякий раз, когда я передаю параметр даты, он отображал такой формат, как «18 января», «18 февраля» и и т. д. По возможности я старался избегать жесткого кода, потому что некоторые данные включают записи за предыдущий год.

Amirul Fahmi 26.10.2018 04:29

Короткий ответ: нет, если вы динамически не генерируете свой оператор SQL, вы не можете использовать значение столбца в качестве значения псевдонима в своем запросе.

dossy 26.10.2018 05:20
0
6
55
1

Ответы 1

Это работает следующим образом

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

Другие вопросы по теме