Rumah >pangkalan data >tutorial mysql >Bagaimana untuk Menyahpivot Lajur ke Baris dalam MySQL?
Helah untuk menukar lajur kepada baris dalam MySQL
Apabila bekerja dengan data tersusun lajur dalam MySQL, anda mungkin perlu menukarnya kepada format yang memaparkan data dalam baris. Proses ini dipanggil unpivoting.
Soalan:
Pertimbangkan borang berikut:
<code>ID | a | b | c 1 | a1 | b1 | c1 2 | a2 | b2 | c2</code>
Matlamatnya adalah untuk menukar lajur kepada baris untuk mendapatkan jadual dengan struktur berikut:
<code>ID | 值 | 列名 1 | a1 | a 1 | b1 | b 1 | c1 | c 2 | a2 | a 2 | b2 | b 2 | c2 | c</code>
Penyelesaian:
Tidak seperti beberapa pangkalan data lain, MySQL tidak mempunyai fungsi pelepasan terbina dalam. Untuk mendapatkan hasil yang anda inginkan, anda boleh menggunakan pertanyaan UNION ALL
untuk menggabungkan pertanyaan berasingan yang secara selektif menukar setiap lajur kepada baris:
<code class="language-sql">SELECT id, 'a' AS col, a AS value FROM yourtable UNION ALL SELECT id, 'b' AS col, b AS value FROM yourtable UNION ALL SELECT id, 'c' AS col, c AS value FROM yourtable;</code>
Pertanyaan ini menjana tiga set data: satu untuk setiap lajur. Setiap kumpulan mengandungi ID, nama lajur dan nilai yang sepadan.
Gunakan CROSS JOIN:
Cara lain ialah menggunakan CROSS JOIN
:
<code class="language-sql">SELECT t.id, c.col, CASE c.col WHEN 'a' THEN a WHEN 'b' THEN b WHEN 'c' THEN c END AS data FROM yourtable t CROSS JOIN ( SELECT 'a' AS col UNION ALL SELECT 'b' UNION ALL SELECT 'c' ) c;</code>
Dalam kes ini, CROSS JOIN
mencipta produk Cartesian antara baris yourtable
dan baris subkueri yang menjana nama lajur. Kenyataan CASE
memetakan setiap nama lajur kepada nilai lajur yang sepadan.
Kedua-dua kaedah melepaskan data dengan berkesan, memberikan anda struktur berasaskan baris yang anda inginkan.
Atas ialah kandungan terperinci Bagaimana untuk Menyahpivot Lajur ke Baris dalam MySQL?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!