Pengisian data ialah operasi biasa dalam transformasi data, yang melibatkan pembentukan semula data daripada reka letak menegak kepada reka letak mendatar. Dalam SQL, ini boleh dicapai menggunakan teknik yang berbeza seperti fungsi UNPIVOT atau PIVOT. Walau bagaimanapun, MySQL tidak mempunyai fungsi PIVOT asli, menjadikannya perlu untuk meneroka kaedah alternatif.
Satu pendekatan untuk pangsi dinamik dalam MySQL ialah membina pertanyaan secara dinamik menggunakan fungsi agregat dan pernyataan CASE. Kaedah ini melibatkan membina pernyataan SQL secara dinamik berdasarkan dimensi dan nilai yang diperlukan dalam output.
Contoh berikut menunjukkan cara melaksanakan pivoting dinamik menggunakan pernyataan yang disediakan:
SET @sql = NULL; SELECT GROUP_CONCAT(DISTINCT CONCAT( 'max(case when part_type = ''', part_type, ''' then part_id end) AS part_', part_type, '_id' ) ) INTO @sql FROM parts; SET @sql = CONCAT('SELECT product_id, ', @sql, ' FROM parts GROUP BY product_id'); PREPARE stmt FROM @sql; EXECUTE stmt; DEALLOCATE PREPARE stmt;
Dalam pertanyaan ini , kami menjana pernyataan SELECT secara dinamik berdasarkan jenis bahagian yang berbeza, yang merupakan dimensi pangsi. Kami menggunakan pernyataan CASE untuk memperuntukkan part_id kepada lajur pangsi yang sesuai berdasarkan jenis_bahagian. Pernyataan SQL yang dijana kemudiannya dilaksanakan menggunakan pernyataan yang disediakan untuk prestasi yang lebih baik.
Pilihan lain ialah menggunakan versi statik pertanyaan jika anda mengetahui bilangan lajur terhad yang diperlukan dalam output:
select product_id, max(case when part_type ='A' then part_id end) as Part_A_Id, max(case when part_type ='B' then part_id end) as Part_B_Id from parts group by product_id
Dengan memanfaatkan teknik ini, anda boleh melaksanakan pivoting dinamik dalam MySQL untuk membentuk semula data anda dengan cekap.
Atas ialah kandungan terperinci Bagaimana untuk Melaksanakan Pivoting Data Dinamik dalam MySQL?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!