Prepared 문을 사용한 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 중국어 웹사이트의 기타 관련 기사를 참조하세요!