最初にデータのピボットを解除してからピボットする必要があります。ただし、残念ながらMySQLにはこれらの関数がないため、UNION ALL
を使用してそれらを複製する必要があります。 CASE
を使用してピボット解除関数と集計関数をクエリします ピボット用。
unpivotまたはUNION ALL
pieceは、col1、col2などからデータを取得し、それを複数の行に変換します。
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
SQL Fiddle withDemo を参照してください。 。
結果:
| 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 |
次に、これをサブクエリでラップして、集計とCASE
を適用します。 これを希望の形式に変換するには:
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
SQL Fiddle withdemo を参照してください。
結果は次のとおりです。
| DESCRIP | JAN | FEB |
-----------------------
| col1 | A | C |
| col2 | B | A |
| col3 | 0 | G |
| col4 | B | E |