2017-02-20 2 views
0

Я выполнение запроса в MySQL, как так ...MySQL поворотные и назначение пользовательских имен столбцов

select employee_id, sale_date, count(id) 
from sales 
group by employee_id, extract(year_month from sale_date); 

данные поступают обратно, как ...

1 1/1/2014 5 
1 2/1/2014 6 
1 3/1/2014 4 
2 1/1/2014 4 
2 2/1/2014 10 
2 3/1/2014 0 
3 1/1/2014 0 
3 2/1/2014 0 
3 3/1/2014 8 

I поворот этой таблицу и что я хочу сделать, это дисплей в следующем формате

ID Jan Feb Mar 
1  5  6  4 
2  4  10  0 
3  0  0  8 

в этой таблице, что я хочу, это имена столбцов, которые соответствуют м на. Если вы находитесь в середине года, я хочу, чтобы 1-я колонка была в любом месяце, в котором вы находитесь, а не в январе.

Что касается моего вопроса - возможно ли так или иначе установить имя столбца динамически в рамках одного и того же оператора SQL? Поскольку я его поворачивал, я могу извлечь имя месяца, я просто пропустил шаг на самом деле написания имени столбца.

+0

Можете ли вы показать нам все минус недостающий шаг? – Strawberry

ответ

2

№ Имя столбца или псевдоним столбца нельзя динамически изменять при выполнении инструкции SQL SELECT.

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

SELECT id AS `ID` 
    , expr AS `Jan` 
    , expr AS `Feb` 
    FROM ... 

Это требование из-за того, как SQL работает , Доходит до довольно простого правила: идентификаторы (например, имена таблиц, имена столбцов, псевдонимы столбцов) должны быть указаны в тексте SQL.

Было бы возможно динамически создать оператор, подобный приведенному выше, как предыдущий шаг. И вы можете использовать другой отдельный SQL-запрос, чтобы помочь вам в этом. Целью предварительных шагов было бы создать оператор, подобный приведенному выше, чтобы получить назначенный псевдоним столбца. Что касается этого, этот вопрос задавался несколько раз в StackOverflow.

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

Смежные вопросы