За съжаление 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 с демонстрация
Сега, ако искате да извършите това динамично, което означава, че не знаете предварително колоните за транспониране, тогава трябва да прегледате следната статия:
Динамични централни таблици (трансформиране на редове в колони)
Вашият код ще изглежда така:
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 с демонстрация