본문 바로가기

Developer

MSSQL 피벗 테이블 샘플 코드(Pivot Table)

MSDN에 잘 나와 있는 내용입니다.

MSDN의 경로는 아래와 같습니다.

PIVOT 및 UNPIVOT 사용

피벗 변환

 

제가 만들고자 하는 내용은 아래와 같습니다.

데이터는 일자, 회사코드, 사용자 아이디 와 같은 경태로 입력됩니다.

이걸 일자에 회사코드 별 사용자 수를 출력하려고 합니다.

 

이럴 때 피벗을 이용하면 쉽게 해결 할 수 있는데요.

아래와 같은 모양을 두 번째 그림처럼 만들려고 합니다.

 

 

첫 번째 이미지의 코드는 아래와 같습니다.

SELECT CREATE_DAY, COMP_CODE, COUNT(USER_ID) AS USER_CNT
  FROM TB_VISITED_LOG
 WHERE COMP_CODE IS NOT NULL
 GROUP BY COMP_CODE, CREATE_DAY
 ORDER BY CREATE_DAY DESC

 

두 번째 이미지의 코드는 아래와 같습니다.

DECLARE @Prod varchar(2000)
SELECT	@Prod = ''
	
SELECT	@Prod = @Prod + '[' + COMP_CODE + '],'
  FROM	(SELECT Distinct COMP_CODE FROM TB_VISITED_LOG WHERE COMP_CODE IS NOT NULL) A
SELECT	@Prod = LEFT(@Prod, LEN(@Prod) - 1)

DECLARE	@NSQL	NVARCHAR(MAX)
SELECT	@NSQL	=  N'
SELECT CREATE_DAY, ' + @Prod + '
  FROM (
	SELECT CREATE_DAY, COMP_CODE, ISNULL(COUNT(USER_ID), 0) AS CNT
	  FROM TB_VISITED_LOG
	 WHERE COMP_CODE IS NOT NULL
	 GROUP BY CREATE_DAY, COMP_CODE
) T
 PIVOT (MAX(CNT) FOR COMP_CODE IN (' + @Prod + ')
) AS PVT
 ORDER BY CREATE_DAY DESC
'

PRINT @NSQL
EXECUTE dbo.SP_EXECUTESQL  @NSQL

 

위의 코드에 피벗 코드가 포함되어 있습니다.

현재 저는 Count 회사 사용자가 필요하여 PIVOT의 다음의 (MAX가 들어간 것이나 여기에 SUM, COUNT 등의 코드가 들어갈 수 있습니다.

좀 해 보시면 금방 이해 될 것입니다.

 

감사합니다.