MySQL Pivot: Tukar lajur kepada baris
Dalam MySQL, jadual pangsi perlu dijana dengan menukar lajur kepada baris untuk persembahan data yang lebih baik. Sebagai contoh, pertimbangkan jadual yang mengandungi berbilang lajur (contohnya, col1, col2) yang mewakili data untuk bulan yang berbeza (contohnya, Januari, Februari).
Keperluan: Buat laporan yang membentangkan data dalam format jadual pangsi, dengan setiap baris mewakili lajur dalam jadual asal dan setiap lajur mewakili bulan yang berbeza.
Peluasan data:
MySQL tidak mempunyai fungsi terbina dalam untuk membuka data (menukar lajur kepada baris). Walau bagaimanapun, ini boleh dicapai dengan pertanyaan UNION ALL:
<code class="language-sql">SELECT id, month, col1 AS value, 'col1' AS descrip FROM yourtable UNION ALL SELECT id, month, col2 AS value, 'col2' AS descrip FROM yourtable UNION ALL SELECT id, month, col3 AS value, 'col3' AS descrip FROM yourtable UNION ALL SELECT id, month, col4 AS value, 'col4' AS descrip FROM yourtable</code>
Keputusan:
Pertanyaan ini menukar data ke dalam format berikut:
ID | MONTH | VALUE | DESCRIP |
---|---|---|---|
101 | Jan | A | col1 |
101 | Jan | B | col2 |
101 | Jan | NULL | col3 |
101 | Jan | B | col4 |
102 | Feb | C | col1 |
102 | Feb | A | col2 |
102 | Feb | G | col3 |
102 | Feb | E | col4 |
Pivot:
Setelah data dikembangkan, ia boleh ditukar kepada format jadual pangsi yang diingini menggunakan fungsi agregat. Pertanyaan berikut menggunakan pernyataan CASE untuk mengumpulkan data mengikut setiap lajur (huraian) dan memaparkan nilai untuk Januari dan Februari:
<code class="language-sql">SELECT descrip, MAX(CASE WHEN month = 'Jan' THEN value ELSE 0 END) AS Jan, MAX(CASE WHEN month = 'Feb' THEN value ELSE 0 END) AS Feb FROM ( SELECT id, month, col1 AS value, 'col1' AS descrip FROM yourtable UNION ALL SELECT id, month, col2 AS value, 'col2' AS descrip FROM yourtable UNION ALL SELECT id, month, col3 AS value, 'col3' AS descrip FROM yourtable UNION ALL SELECT id, month, col4 AS value, 'col4' AS descrip FROM yourtable ) src GROUP BY descrip</code>
Keputusan:
Pertanyaan ini menjana format jadual pangsi yang diperlukan:
DESCRIP | JAN | FEB |
---|---|---|
col1 | A | C |
col2 | B | A |
col3 | 0 | G |
col4 | B | E |
Atas ialah kandungan terperinci Bagaimana untuk Pivot Data dalam MySQL: Mengubah Lajur menjadi Baris?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!