Ce que vous devez faire est d'abord, de faire pivoter les données, puis de les faire pivoter. Mais malheureusement, MySQL ne dispose pas de ces fonctions, vous devrez donc les répliquer en utilisant une requête UNION ALL
pour l'unpivot et une fonction d'agrégat avec un CASE
pour le pivot.
Le UNPIVOT ou UNION ALL
pièce prend les données de votre col1, col2, etc et il se transforme en plusieurs lignes:
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
Voir SQL Fiddle with Demo.
Résultat:
| 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 |
Vous Enveloppez ensuite ceci dans une sous-requête pour appliquer l'ensemble et la CASE
pour convertir en le format que vous voulez:
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
Voir SQL Fiddle with demo
Le le résultat est:
| DESCRIP | JAN | FEB |
-----------------------
| col1 | A | C |
| col2 | B | A |
| col3 | 0 | G |
| col4 | B | E |
Bienvenue sur stackoverflow. [Ceci est une question très commune] (http://stackoverflow.com/search?q= [mysql] + pivot). Veuillez prendre quelques minutes pour chercher dans les archives. Essayez d'adapter l'une des réponses précédentes en premier. Ensuite, si vous rencontrez des problèmes, postez votre requête et toute erreur ici. – Leigh
duplication possible de [ligne de pivot MySQL en nombre dynamique de colonnes] (http://stackoverflow.com/questions/12004603/mysql-pivot-row-into-dynamic-number-of-columns) – RichardTheKiwi