Sfortunatamente MySQL non ha un PIVOT
funzione che è fondamentalmente ciò che stai cercando di fare. Quindi dovrai utilizzare una funzione di aggregazione con un CASE
dichiarazione:
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
Vedi SQL Fiddle con demo
Ora, se vuoi eseguire questa operazione in modo dinamico, il che significa che non conosci in anticipo le colonne da trasporre, dovresti rivedere il seguente articolo:
Tabelle pivot dinamiche (trasforma le righe in colonne)
Il tuo codice sarebbe simile a questo:
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;
Vedi SQL Fiddle con demo