Desafortunadamente, MySQL no tiene un PIVOT
función que es básicamente lo que está tratando de hacer. Por lo tanto, deberá usar una función agregada con un CASE
declaración:
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
Consulte SQL Fiddle con demostración
Ahora bien, si desea realizar esto dinámicamente, lo que significa que no sabe de antemano qué columnas transponer, debe revisar el siguiente artículo:
Tablas dinámicas dinámicas (transformar filas en columnas)
Su código se vería así:
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;
Consulte SQL Fiddle con demostración