Memindahkan Lajur Dinamik kepada Baris: Mencapai Transformasi yang Diingini
Pengenalan:
Menyahpivoting data daripada lajur ke dalam rows ialah operasi biasa dalam manipulasi data. Artikel ini meneroka cara menukar lajur dinamik dalam Jadual_1, dengan mengambil kira hanya nilai yang lebih besar daripada 0, untuk mendapatkan Jadual_Keputusan_Jangkaan yang dikehendaki.
Fungsi UNPIVOT MySQL:
MySQL tidak menyediakan UNPIVOT secara asli. fungsi. Walau bagaimanapun, kaedah berikut boleh digunakan untuk mencapai hasil yang diingini:
Pendekatan Berasaskan Lajur Statik:
Untuk bilangan lajur statik yang terhad, anda boleh menggunakan satu siri UNION SEMUA penyataan untuk mencipta jadual yang diubah suai. Setiap pernyataan akan memilih lajur tertentu sebagai Word dan Qty. Pendekatan ini sesuai untuk skema statik dengan bilangan lajur yang diketahui.
Pendekatan Berasaskan Lajur Dinamik:
Untuk skema dinamik dengan bilangan lajur yang tidak diketahui, pendekatan yang lebih sofistikated ialah diperlukan. Anda boleh menggunakan pernyataan yang disediakan untuk menjana SQL dinamik yang akan memaksi lajur. Ini melibatkan penciptaan pernyataan UNION ALL secara dinamik untuk setiap lajur.
Contoh untuk Lajur Dinamik:
Pertanyaan MySQL yang disediakan menunjukkan cara menukar lajur dalam Jadual_1 menggunakan pendekatan dinamik:
SET @sql = NULL; SELECT GROUP_CONCAT(DISTINCT CONCAT( 'select id, ''', c.column_name, ''' as word, ', c.column_name, ' as qty from yt where ', c.column_name, ' > 0' ) SEPARATOR ' UNION ALL ' ) INTO @sql FROM information_schema.columns c where c.table_name = 'yt' and c.column_name not in ('id') order by c.ordinal_position; SET @sql = CONCAT('select id, word, qty from (', @sql, ') x order by id'); PREPARE stmt FROM @sql; EXECUTE stmt; DEALLOCATE PREPARE stmt;
Kesimpulan:
Oleh menggunakan sama ada pendekatan statik atau dinamik, anda boleh menukar lajur dinamik dengan berkesan dalam MySQL, dengan mengambil kira hanya nilai yang lebih besar daripada 0, untuk mendapatkan struktur berasaskan baris yang diingini yang diwakili oleh Jadual_Hasil_Dijangka.
Atas ialah kandungan terperinci Bagaimana untuk Memindahkan Lajur Dinamik kepada Baris dalam MySQL dengan Nilai Lebih Besar Daripada 0?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!