동적 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 중국어 웹사이트의 기타 관련 기사를 참조하세요!