반응형
PIVOT 연산자는 행으로 나열되어 있는 데이터를 열로 가공하는 것이다.
요구 사항 상, 한줄 컬럼 PIVOT이 아닌 다중컬럼,
또 행 데이터가 RANK 연산자로 인해 가변값들이었기 때문에
동적 UNPIVOT을 사용해야했다.
DECLARE @QUERY VARCHAR(MAX);
DECLARE @STRCOLUMN VARCHAR(MAX);
DECALRE @KEYCOLUMN VARCHAR(MAX);
-- 생략하였지만 위에서 이미 만들어준 #SERVICEACCEPT라는 테이블이 있다.
/* RANK 연산자에 의해서 #SERVICEACCEPT ROW 데이터들이 변하기 때문에
이 값들을 @STRCOLUMN에 [],[],[], 형태로 담아준다.
*/
SET @STRCOLUMN = STUFF((SELECT '],[' + SERVICENAME FROM #SERVICEACCEPT FOR XML PATH('')) + ']',1,1,'');
SET @STRCOLUMN = RIGHT(@STRCOLUMN, LEN(@STRCOLUMN)-1);
--위에서 담았던 ROW 데이터들을 컬럼으로 만들고 기존에 컬럼이었던 SR, CR,계 를 행으로 피봇.
SET @QUERY = '
SELECT [구분],' + @STRCOLUMN + '
FROM (
SELECT SERVICENAME, 구분, CNT
FROM #SERVICEACCEPT A
UNPIVOT([CNT] FOR [구분] IN ([SR],[CR],[계])) AS UNPVT) T
PIVOT(SUM([CNT]) FOR [SERVICENAME] IN ('+@STRCOLUMN+')) AS PVT
ORDER BY (CASE WHEN 구분 = ''SR'' THEN 0 WHEN 구분 = ''CR'' THEN 1
ELSE 2 END
)'
EXEC(@QUERY)
반응형
'IT > DB' 카테고리의 다른 글
[MSSQL] RAISERROR란, 프로시져 에러 메세지 발생시키기 (0) | 2022.06.27 |
---|---|
[MYSQL] SELECT 결과로 테이블 생성 (0) | 2022.06.23 |
[MSSQL] CASE 문 CASE WHEN THEN (0) | 2022.04.22 |
[MSSQL]CONCAT으로 여러 값 이어붙이기 (0) | 2022.04.15 |
[MSSQL] 한쪽 테이블에만 있는 값을 다른 테이블에 INSERT (0) | 2022.04.15 |