MySQL har desværre ikke en PIVOT
funktion, som dybest set er det, du forsøger at gøre. Så du bliver nødt til at bruge en aggregeret funktion med en CASE
erklæring:
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
Hvis du nu vil udføre dette dynamisk, hvilket betyder, at du ikke på forhånd ved, hvilke kolonner der skal transponeres, så bør du gennemgå følgende artikel:
Dynamiske pivottabeller (transformer rækker til kolonner)
Din kode vil se sådan ud:
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;