Mengasingkan Data Secara Dinamik dengan Fungsi Agregat MySQL dan Penyata KES
Pertimbangkan jadual bahagian produk dengan skema berikut:
CREATE TABLE Parts ( part_id INT NOT NULL, part_type CHAR(1) NOT NULL, product_id INT NOT NULL, PRIMARY KEY (part_id) );
Sampel Data:
INSERT INTO Parts (part_id, part_type, product_id) VALUES (1, 'A', 1), (2, 'B', 1), (3, 'A', 2), (4, 'B', 2), (5, 'A', 3), (6, 'B', 3);
Matlamatnya adalah untuk memutar data ini ke dalam jadual yang mewakili bahagian produk sebagai lajur:
CREATE TABLE PivotedParts ( product_id INT NOT NULL, part_A_id INT, part_B_id INT, PRIMARY KEY (product_id) );
Penyelesaian Pangsi Dinamik:
MySQL tidak mempunyai fungsi PIVOT terbina dalam, tetapi penyelesaian dinamik boleh dicapai menggunakan fungsi agregat dan penyataan KES:
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;
Contoh Output:
+------------+----------+----------+ | product_id | part_A_id | part_B_id | +------------+----------+----------+ | 1 | 1 | 2 | | 2 | 3 | 4 | | 3 | 5 | 6 | +------------+----------+----------+
Penyelesaian Pivoting Statik (untuk bilangan lajur yang terhad):
Untuk penyelesaian pivoting statik dengan bilangan lajur yang terhad, pertanyaan berikut boleh digunakan:
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;
Output:
+------------+----------+----------+ | product_id | part_A_id | part_B_id | +------------+----------+----------+ | 1 | 1 | 2 | | 2 | 3 | 4 | | 3 | 5 | 6 | +------------+----------+----------+
Atas ialah kandungan terperinci Bagaimana untuk Mengubah Data Secara Dinamik dalam MySQL Menggunakan Fungsi Agregat dan Pernyataan CASE?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!