[MSSQL] 동적 피벗 테이블 만들기
- DB/MSSQL
- 2018. 4. 10.
이번 포스팅에서는 앞선 두 포스팅에서 배웠던
기법들을 활용해 동적 피벗테이블을 만들어보도록 하겠습니다.
동적 피벗 테이블 만들기 예제
테이블 DEPT, EMP를 이용해서 연도별(DT) 부서 입사 현황을 조회한다
(회사코드(COMPANY):0327, 사업장코드(BIZAREA):1000 데이터로 한정함)
1. PIVOT을 이용해 년도를 칼럼으로 표시
2. 동적컬럼 생성 시 STUFF, QUOTENAME 함수를 이용하여 입사자가 있는 년도만 표시
결과 화면 예시
동적 피벗 만들기
DECLARE @COL AS NVARCHAR(MAX) --변수선언
DECLARE @QUERY AS NVARCHAR(MAX)
--변수에 쿼리결과 저장--
SELECT @COL = STUFF((SELECT ',' + QUOTENAME(SUBSTRING(DT,0,5))
FROM EMP
WHERE
BIZAREA = '1000' AND
COMPANY = '0327' AND
DT IS NOT NULL
GROUP BY SUBSTRING(DT,0,5)
ORDER BY SUBSTRING(DT,0,5)
FOR XML PATH(''),TYPE
).value('.','NVARCHAR(MAX)')
,1,1,'')
--동적피벗만들기--
SET @QUERY =
'SELECT * FROM
(
SELECT
A.CD_DEPT,
A.NM_DEPT AS 부서명,
SUBSTRING(B.DT,0,5) AS DT
FROM DEPT A
LEFT OUTER JOIN EMP B ON A.COMPANY = B.COMPANY AND
A.DEPT = B.DEPT AND A.BIZAREA = B.BIZAREA
WHERE
A.BIZAREA = ''1000'' AND
A.COMPANY = ''0327'' AND
B.DT IS NOT NULL
)Q
PIVOT
(
COUNT(DEPT) FOR DT IN ('+ @COL +')
)P'
EXECUTE(@QUERY);
'DB > MSSQL' 카테고리의 다른 글
[MSSQL] STUFF와 FOR XML PATH를 활용한 문자열 합치기 (3) | 2018.04.09 |
---|---|
[MSSQL] 문자열 구분자 추가 (QUOTENAME) 함수 사용법 & 예제 (0) | 2018.04.06 |
[MSSQL] BETWEEN절 사용법 & 예제 (0) | 2018.04.05 |
[MSSQL] IN절 사용법 & 예제 (0) | 2018.04.04 |