Najpierw należy rozpakować dane, a następnie je przestawić. Ale niestety MySQL nie ma tych funkcji, więc będziesz musiał je replikować za pomocą zapytania UNION ALL
dla funkcji unpivot i agregatu z CASE
dla osi przestawnej.
UNPIVOT lub UNION ALL
kawałek bierze dane z col1, col2, etc i zamienia ją w wielu wierszach:
select id, month, col1 value, 'col1' descrip
from yourtable
union all
select id, month, col2 value, 'col2' descrip
from yourtable
union all
select id, month, col3 value, 'col3' descrip
from yourtable
union all
select id, month, col4 value, 'col4' descrip
from yourtable
Zobacz SQL Fiddle with Demo.
Wynik:
| ID | MONTH | VALUE | DESCRIP |
----------------------------------
| 101 | Jan | A | col1 |
| 102 | feb | C | col1 |
| 101 | Jan | B | col2 |
| 102 | feb | A | col2 |
| 101 | Jan | (null) | col3 |
| 102 | feb | G | col3 |
| 101 | Jan | B | col4 |
| 102 | feb | E | col4 |
Następnie owinąć to w podkwerendzie stosować kruszywo a CASE
do konwersji na format chcesz:
select descrip,
max(case when month = 'jan' then value else 0 end) jan,
max(case when month = 'feb' then value else 0 end) feb
from
(
select id, month, col1 value, 'col1' descrip
from yourtable
union all
select id, month, col2 value, 'col2' descrip
from yourtable
union all
select id, month, col3 value, 'col3' descrip
from yourtable
union all
select id, month, col4 value, 'col4' descrip
from yourtable
) src
group by descrip
Zobacz SQL Fiddle with demo
wynik to:
| DESCRIP | JAN | FEB |
-----------------------
| col1 | A | C |
| col2 | B | A |
| col3 | 0 | G |
| col4 | B | E |
Witamy w stackoverflow. [To jest bardzo częste pytanie] (http://stackoverflow.com/search?q= [mysql] + pivot). Poświęć kilka minut na przeszukanie archiwów. Spróbuj najpierw dopasować jedną z poprzednich odpowiedzi. Następnie, jeśli napotkasz problemy, opublikuj zapytanie i wszelkie błędy tutaj. – Leigh
możliwy duplikat [wiersza przestawnego MySQL do dynamicznej liczby kolumn] (http://stackoverflow.com/questions/12004603/mysql-pivot-row-into-dynamic-number-of-columns) – RichardTheKiwi