Pangsi Dinamik dalam MySQL Menggunakan Penyata Disediakan
MySQL tidak mempunyai fungsi PIVOT asli, tetapi anda boleh menirunya menggunakan fungsi agregat dan pernyataan CASE. Untuk data berputar secara dinamik, pernyataan yang disediakan menawarkan penyelesaian yang cekap.
Pertimbangkan senario dengan jadual bahagian produk:
CREATE TABLE Parts ( part_id INT, part_type VARCHAR(1), product_id INT ); 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);
Output yang diingini ialah jadual terpangsi yang meringkaskan ID bahagian untuk setiap produk:
product_id part_A_id part_B_id ---------- ---------- ---------- 1 1 2 2 3 4 3 5 6
Dipangsi Dinamik Pertanyaan
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;
Pertanyaan Terpangsi Statik (Lajur Terhad)
Untuk pertanyaan statik dengan bilangan lajur pangsi yang tetap:
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;
Atas ialah kandungan terperinci Bagaimana untuk Mengubah Data Secara Dinamik dalam MySQL Menggunakan Penyata Disediakan?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!