आपको जो करना है वह पहले डेटा को अनपिवट करना है और फिर उसे पिवट करना है। लेकिन दुर्भाग्य से MySQL में ये फ़ंक्शन नहीं हैं, इसलिए आपको UNION ALL
. का उपयोग करके उन्हें दोहराने की आवश्यकता होगी अनपिवट के लिए क्वेरी और CASE
. के साथ एक समग्र फ़ंक्शन धुरी के लिए।
अनपिवट या UNION ALL
टुकड़ा आपके 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 with Demo .
परिणाम:
| 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 with डेमो
नतीजा यह है:
| DESCRIP | JAN | FEB |
-----------------------
| col1 | A | C |
| col2 | B | A |
| col3 | 0 | G |
| col4 | B | E |