Sayangnya MySQL tidak memiliki PIVOT
fungsi yang pada dasarnya adalah apa yang Anda coba lakukan. Jadi, Anda perlu menggunakan fungsi agregat dengan CASE
pernyataan:
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
Lihat SQL Fiddle dengan Demo
Sekarang jika Anda ingin melakukan ini secara dinamis, artinya Anda tidak tahu sebelumnya kolom yang akan ditranspose, maka Anda harus meninjau artikel berikut:
Tabel pivot dinamis (mengubah baris menjadi kolom)
Kode Anda akan terlihat seperti ini:
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;
Lihat SQL Fiddle dengan Demo