MySQL में पिवट नहीं है फ़ंक्शन ताकि आपको CASE
के साथ एक समग्र फ़ंक्शन का उपयोग करके डेटा को पंक्तियों से कॉलम में स्थानांतरित करना होगा अभिव्यक्ति:
select
sum(case when tt.type = 'UnitTest' then 1 else 0 end) UnitTest,
sum(case when tt.type = 'WebTest' then 1 else 0 end) WebTest
from test t
inner join test_type tt
on t.test_type = tt.id
देखें SQL Fiddle with Demo ।
यदि आपके पास अज्ञात संख्या में types
होने जा रहे हैं कि आप कॉलम में कनवर्ट करना चाहते हैं, आप गतिशील SQL उत्पन्न करने के लिए तैयार कथन का उपयोग कर सकते हैं:
SET @sql = NULL;
SELECT
GROUP_CONCAT(DISTINCT
CONCAT(
'sum(CASE WHEN tt.type = ''',
type,
''' THEN 1 else 0 END) AS `',
type, '`'
)
) INTO @sql
FROM test_type;
SET @sql
= CONCAT('SELECT ', @sql, '
from test t
inner join test_type tt
on t.test_type = tt.id');
PREPARE stmt FROM @sql;
EXECUTE stmt;
DEALLOCATE PREPARE stmt;
देखें SQL Fiddle with Demo