使用預準備語句在MySQL 中進行動態透視
MySQL 缺乏原生PIVOT 函數,但您可以使用聚合函數和CASE 語句來模擬它。對於動態資料透視,準備好的語句提供了一個有效的解決方案。
考慮一個包含產品零件表的場景:
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);
所需的輸出是一個匯總了每個零件 ID的透視表產品:
product_id part_A_id part_B_id ---------- ---------- ---------- 1 1 2 2 3 4 3 5 6
動態旋轉查詢
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;
靜態透視查詢(有限列)
靜態透視查詢(有限列)
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;
以上是如何使用準備好的語句動態透視 MySQL 中的資料?的詳細內容。更多資訊請關注PHP中文網其他相關文章!