Rumah >pangkalan data >tutorial mysql >Bagaimana untuk Pivot Data dalam MySQL dengan Nama Lajur Dinamik daripada Lajur Tunggal?

Bagaimana untuk Pivot Data dalam MySQL dengan Nama Lajur Dinamik daripada Lajur Tunggal?

Linda Hamilton
Linda Hamiltonasal
2025-01-13 19:57:44230semak imbas

How to Pivot Data in MySQL with Dynamic Column Names from a Single Column?

Nilai baris dinamik MySQL sebagai pangsi nama lajur

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:

  1. Subkueri memilih nilai nama yang berbeza dan menjana pertanyaan UNION untuk mewakili nama lajur berbeza yang diperlukan untuk pangsi.
  2. Fungsi CONCAT() menggabungkan rentetan SQL dan menggunakan GROUP_CONCAT untuk menyambung secara dinamik nama lajur dengan nilainya.
  3. Ia mencipta stmt prosedur tersimpan sementara menggunakan rentetan SQL yang dihasilkan.
  4. EXECUTE pernyataan stmt melaksanakan pertanyaan SQL dinamik, memutar data seperti yang diharapkan.

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!

Kenyataan:
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn