Rumah >pangkalan data >tutorial mysql >Bagaimana untuk Pivot Data dalam MySQL dengan Nama Lajur Dinamik daripada Lajur Tunggal?
Soalan:
Dalam jadual MySQL yang lebih lama, data anda mempunyai nama lajur boleh ubah yang disimpan sebagai nilai unik dalam satu lajur bernama "nama". Anda memerlukan pertanyaan yang menukar data ini kepada format pangsi, di mana nilai nama menjadi pengepala lajur dan nilai medan yang sepadan menjadi nilai di bawah pengepala tersebut.
Penyelesaian:
Walaupun kekurangan sokongan asli untuk pangsi, MySQL masih boleh mencapai ini melalui SQL dinamik dan fungsi GROUP_CONCAT().
Pertanyaan MySQL:
<code class="language-sql">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;</code>
Arahan:
Keputusan:
Pertanyaan mengembalikan set hasil pangsi dengan nilai nama sebagai pengepala lajur dan nilai medan sebagai nilai yang sepadan:
id | timezone | language | country | something |
---|---|---|---|---|
0 | Europe/London | en | 45 | x |
1 | Europe/Paris | fr | 46 | NULL |
Atas ialah kandungan terperinci Bagaimana untuk Pivot Data dalam MySQL dengan Nama Lajur Dinamik daripada Lajur Tunggal?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!