दुर्भाग्य से MySQL में PIVOT
नहीं है फ़ंक्शन जो मूल रूप से आप करने की कोशिश कर रहे हैं। तो आपको CASE
. के साथ एक समग्र फ़ंक्शन का उपयोग करने की आवश्यकता होगी कथन:
SELECT type,
sum(case when criteria_id = 'env' then result end) env,
sum(case when criteria_id = 'gas' then result end) gas,
sum(case when criteria_id = 'age' then result end) age
FROM results
group by type
देखें SQL Fiddle with Demo
अब यदि आप इसे गतिशील रूप से करना चाहते हैं, जिसका अर्थ है कि आप समय से पहले कॉलम को स्थानांतरित करने के बारे में नहीं जानते हैं, तो आपको निम्नलिखित लेख की समीक्षा करनी चाहिए:
डायनामिक पिवट टेबल (पंक्तियों को कॉलम में बदलना)
आपका कोड इस तरह दिखेगा:
SET @sql = NULL;
SELECT
GROUP_CONCAT(DISTINCT
CONCAT(
'SUM(IF(CRITERIA_ID = ''',
CRITERIA_ID,
''', RESULT, NULL)) AS ',
CRITERIA_ID
)
) INTO @sql
FROM
Results;
SET @sql = CONCAT('SELECT type, ', @sql, ' FROM Results GROUP BY type');
PREPARE stmt FROM @sql;
EXECUTE stmt;
DEALLOCATE PREPARE stmt;
देखें SQL Fiddle with Demo