Tidak seperti beberapa RDBMS lainnya, MySQL tidak memiliki dukungan asli untuk operasi pivoting semacam ini berdasarkan desain (pengembang merasa itu lebih cocok untuk presentasi, daripada database, lapisan aplikasi Anda).
Jika Anda benar-benar harus melakukan manipulasi seperti itu di dalam MySQL, membuat pernyataan yang sudah disiapkan adalah cara yang harus dilakukan—walaupun daripada bermain-main dengan CASE
, saya mungkin hanya akan menggunakan GROUP_CONCAT()
fungsi:
SELECT CONCAT(
'SELECT `table`.id', GROUP_CONCAT('
, `t_', REPLACE(name, '`', '``'), '`.value
AS `', REPLACE(name, '`', '``'), '`'
SEPARATOR ''),
' FROM `table` ', GROUP_CONCAT('
LEFT JOIN `table` AS `t_', REPLACE(name, '`', '``'), '`
ON `table`.id = `t_', REPLACE(name, '`', '``'), '`.id
AND `t_', REPLACE(name, '`', '``'), '`.name = ', QUOTE(name)
SEPARATOR ''),
' GROUP BY `table`.id'
) INTO @qry FROM (SELECT DISTINCT name FROM `table`) t;
PREPARE stmt FROM @qry;
EXECUTE stmt;
Lihat di sqlfiddle .
Perhatikan bahwa hasil dari GROUP_CONCAT()
dibatasi oleh group_concat_max_len
variabel (default 1024 byte:tidak mungkin relevan di sini kecuali Anda memiliki name
yang sangat panjang nilai).