Bohužel MySQL nemá PIVOT
funkce, což je v podstatě to, o co se snažíte. Takže budete muset použít agregační funkci s CASE
prohlášení:
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
Nyní, pokud to chcete provést dynamicky, což znamená, že předem nevíte, které sloupce se mají transponovat, měli byste si přečíst následující článek:
Dynamické kontingenční tabulky (transformace řádků na sloupce)
Váš kód by vypadal takto:
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;