Това, което трябва да направите, е първо да развиете данните и след това да ги завъртите. Но за съжаление MySQL няма тези функции, така че ще трябва да ги репликирате с помощта на UNION ALL
заявка за unpivot и агрегатна функция с CASE
за опората.
Развъртането или UNION ALL
piece взема данните от вашите col1, col2 и т.н. и ги превръща в няколко реда:
изберете идентификатор, месец, стойност на col1, 'col1' descrip от yourtableunion allselect id, month, col2 value, 'col2' descrip from yourtableunion allselect идентификатор, месец, col3 value, 'col3' descrip от yourtableunion allselect id col4 стойност, 'col4' описание от вашата таблица
Вижте SQL Fiddle с демонстрация .
Резултат:
<предварителен код>| ID | МЕСЕЦ | СТОЙНОСТ | ОПИСАНИЕ |---------------------------------| 101 | януари | A | col1 || 102 | февруари | C | col1 || 101 | януари | Б | col2 || 102 | февруари | A | col2 || 101 | януари | (нула) | col3 || 102 | февруари | G | col3 || 101 | януари | Б | col4 || 102 | февруари | E | col4 |
След това увивате това в подзаявка, за да приложите агрегата и CASE
за да конвертирате това в желания от вас формат:
изберете описание, макс(случай, когато месец ='ян', след това стойност друго 0 край) ян, макс (случай, когато месец ='февруари', след това стойност друго 0 край) febfrom( изберете идентификатор, месец, стойност на столбец1 , 'col1' описание от вашия таблицен съюз всички изберете идентификатор, месец, col2 стойност, 'col2' описание от вашия обединение на таблицата всички изберете идентификатор, месец, col3 стойност, 'col3' описание от вашия таблицен съюз всички изберете идентификатор, месец, col4 стойност, ' col4' описание от вашата таблица) srcгрупа по descrip
Вижте SQL Fiddle с демонстрация
Резултатът е:
<предварителен код>| ОПИСАНИЕ | ЯН | ФЕВ |-----------------------| col1 | A | C || col2 | Б | A || col3 | 0 | G || col4 | Б | E |