ऐसे दो तरीके हैं जिनसे आप पिवट कर सकते हैं MySQL में डेटा। यदि आप समय से पहले के मूल्यों (टीमों) को जानते हैं तो आप मूल्यों को हार्ड-कोड करेंगे या आप गतिशील एसक्यूएल उत्पन्न करने के लिए तैयार कथन का उपयोग कर सकते हैं।
एक स्थिर संस्करण होगा:
select TeamA,
max(case when TeamB = 'A' then won - lost else 0 end) as A,
max(case when TeamB = 'B' then won - lost else 0 end) as B,
max(case when TeamB = 'C' then won - lost else 0 end) as C,
max(case when TeamB = 'D' then won - lost else 0 end) as D,
max(case when TeamB = 'E' then won - lost else 0 end) as E
from yourtable
group by TeamA;
देखें SQL Fiddle with Demo
यदि आप तैयार कथन के साथ एक गतिशील संस्करण का उपयोग करना चाहते हैं, तो कोड होगा:
SET @sql = NULL;
SELECT
GROUP_CONCAT(DISTINCT
CONCAT(
'MAX(CASE WHEN TeamB = ''',
TeamB,
''' THEN won - lost else 0 END) AS `',
TeamB, '`'
)
) INTO @sql
from
(
select *
from yourtable
order by teamb
) x;
SET @sql
= CONCAT('SELECT TeamA, ', @sql, '
from yourtable
group by TeamA');
PREPARE stmt FROM @sql;
EXECUTE stmt;
DEALLOCATE PREPARE stmt;
देखें SQL Fiddle with Demo ।
# 1 संपादित करें, इस बारे में सोचने के बाद मैं वास्तव में इसे थोड़ा अलग करूंगा। मैं एक वास्तविक मैट्रिक्स ओएस डेटा उत्पन्न करता हूं जहां टीम पंक्ति और कॉलम दोनों में दिखाई देती है। ऐसा करने के लिए आप सबसे पहले एक UNION ALL
. का उपयोग करेंगे सभी टीमों को दो कॉलम में लाने के लिए क्वेरी:
select teama Team1, teamb Team2,
won-lost Total
from yourtable
union all
select teamb, teama,
won-lost
from yourtable
देखें SQL Fiddle with Demo . एक बार यह हो जाने के बाद, आप पिवट . करेंगे डेटा:
select Team1,
coalesce(max(case when Team2 = 'A' then Total end), 0) as A,
coalesce(max(case when Team2 = 'B' then Total end), 0) as B,
coalesce(max(case when Team2 = 'C' then Total end), 0) as C,
coalesce(max(case when Team2 = 'D' then Total end), 0) as D,
coalesce(max(case when Team2 = 'E' then Total end), 0) as E
from
(
select teama Team1, teamb Team2,
won-lost Total
from yourtable
union all
select teamb, teama,
won-lost
from yourtable
) src
group by Team1;
देखें SQL Fiddle with Demo . जो इसका अधिक विस्तृत परिणाम देता है:
| TEAM1 | A | B | C | D | E |
-------------------------------
| A | 0 | 2 | -2 | 8 | 0 |
| B | 2 | 0 | 0 | 0 | 0 |
| C | -2 | 0 | 0 | 0 | 0 |
| D | 8 | 0 | 0 | 0 | 0 |
| E | 0 | 0 | 0 | 0 | 0 |