इस प्रकार के डेटा परिवर्तन को धुरी . के रूप में जाना जाता है . MySQL में पिवट फ़ंक्शन नहीं है, इसलिए आप CASE
के साथ एक समग्र फ़ंक्शन का उपयोग करके डेटा को बदलना चाहेंगे अभिव्यक्ति।
यदि आप समय से पहले मूल्यों को बदलने के लिए जानते हैं, तो आप उन्हें इसी तरह हार्ड-कोड कर सकते हैं:
select studentid,
sum(case when subject = 'Java' then mark else 0 end) Java,
sum(case when subject = 'C#' then mark else 0 end) `C#`,
sum(case when subject = 'JavaScript' then mark else 0 end) JavaScript
from yourtable
group by studentid
देखें SQL Fiddle with Demo ।
यदि विषय के मान अज्ञात या लचीले हैं, तो आप गतिशील sql उत्पन्न करने के लिए तैयार कथन का उपयोग करना चाह सकते हैं:
SET @sql = NULL;
SELECT
GROUP_CONCAT(DISTINCT
CONCAT(
'sum(case when subject = ''',
subject,
''' then mark else 0 end) AS `',
subject, '`'
)
) INTO @sql
FROM yourtable;
SET @sql = CONCAT('SELECT studentid, ', @sql, '
from yourtable
group by studentid');
PREPARE stmt FROM @sql;
EXECUTE stmt;
DEALLOCATE PREPARE stmt;
देखें SQL Fiddle with Demo ।
दोनों प्रश्नों का परिणाम है:
| STUDENTID | JAVA | C# | JAVASCRIPT |
--------------------------------------
| 10 | 46 | 65 | 79 |
| 11 | 66 | 85 | 99 |