집 >데이터 베이스 >MySQL 튜토리얼 >동적 SQL을 사용하여 DB2에서 행을 열로 피벗하는 방법은 무엇입니까?
동적 SQL을 사용하여 DB2에서 행을 열로 전치
목표는 테이블의 데이터를 피벗하고 행을 열로 변환하여 다음을 얻는 것입니다. 원하는 출력. 다음 테이블 구조를 고려하십시오.
소스 테이블
ItemID | Item | Value |
---|---|---|
1 | Meeting | Now |
1 | Advise | Yes |
1 | NoAdvise | No |
2 | Meeting | Never |
2 | Advise | No |
2 | NoAdvise | Null |
2 | Combine | Yes |
원하는 출력
ItemID | Meeting | Advise | NoAdvise |
---|---|---|---|
1 | Now | Yes | No |
2 | Never | No | Null |
SQL 상관관계를 사용한 쿼리 하위 쿼리
이 변환을 달성하는 한 가지 접근 방식은 상관 하위 쿼리를 사용하는 것입니다.
SELECT A.ItemID, MAX(CASE WHEN A.Item = 'Meeting' THEN Value END) AS Meeting, MAX(CASE WHEN A.Item = 'Advise' THEN Value END) AS Advise, MAX(CASE WHEN A.Item = 'NoAdvise' THEN Value END) AS NoAdvise FROM A GROUP BY A.ItemID
이 쿼리는 원하는 각 출력 열에 대해 하나씩 여러 상관 하위 쿼리를 실행하여 해당 값을 추출합니다. 각 행마다. 그런 다음 결과는 ItemID 열별로 그룹화되어 피벗된 출력을 얻습니다.
동적 SQL을 사용한 대체 접근 방식
또 다른 옵션은 동적 SQL을 활용하여 피벗 테이블을 구성하는 것입니다. . 이 접근 방식은 더 많은 유연성을 제공하며 원하는 출력 열을 생성하도록 사용자 정의할 수 있습니다.
DECLARE @cols AS NVARCHAR(MAX), @sql AS NVARCHAR(MAX) SET @cols = '' SELECT @cols += ',MAX(CASE WHEN Item = ''' + Item + ''' THEN Value END) AS ' + Item FROM ( SELECT DISTINCT Item FROM A ) AS Items SET @sql = 'SELECT ItemID, ' + SUBSTRING(@cols, 2) + ' FROM A GROUP BY ItemID' EXEC (@sql)
이 쿼리는 항목 열의 고유 값을 기반으로 SQL 문을 동적으로 구성하고 실행하여 피벗된 출력을 생성합니다. .
위 내용은 동적 SQL을 사용하여 DB2에서 행을 열로 피벗하는 방법은 무엇입니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!