Önce yapmanız gereken, önce verileri atamak ve sonra döndürmek. Ama ne yazık ki MySQL'in bu işlevleri yoktur, bu nedenle, CASE
pivot için bir unpivot ve bir toplama fonksiyonu için UNION ALL
sorgusunu kullanarak bunları çoğaltmanız gerekecektir.
UNPIVOT veya UNION ALL
parça vb col1, col2, gelen verileri alır ve birden çok satır haline döner:
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 with Demo bakınız.
Sonuç:
| 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 |
Ardından istediğiniz formata dönüştürmek amacıyla CASE
agrega uygulamak için bir alt sorguda bu sarın ve:
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
Bkz SQL Fiddle with demo
sonuç:
| DESCRIP | JAN | FEB |
-----------------------
| col1 | A | C |
| col2 | B | A |
| col3 | 0 | G |
| col4 | B | E |
Yığın akışına hoş geldiniz. [Bu çok yaygın bir sorudur] (http://stackoverflow.com/search?q= [mysql] + pivot). Arşivleri aramak için lütfen birkaç dakikanızı ayırın. İlk cevaplardan birini uyarlamayı deneyin. Daha sonra, sorun yaşarsanız, sorgunuzu ve burada oluşan hataları gönderin. – Leigh
[MySQL pivot satırının dinamik sütun sayısına] olası kopyası (http://stackoverflow.com/questions/12004603/mysql-pivot-row-into-dynamic-number-of-columns) – RichardTheKiwi