MSDN에 잘 나와 있는 내용입니다.
MSDN의 경로는 아래와 같습니다.
제가 만들고자 하는 내용은 아래와 같습니다.
데이터는 일자, 회사코드, 사용자 아이디 와 같은 경태로 입력됩니다.
이걸 일자에 회사코드 별 사용자 수를 출력하려고 합니다.
이럴 때 피벗을 이용하면 쉽게 해결 할 수 있는데요.
아래와 같은 모양을 두 번째 그림처럼 만들려고 합니다.
첫 번째 이미지의 코드는 아래와 같습니다.
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 등의 코드가 들어갈 수 있습니다.
좀 해 보시면 금방 이해 될 것입니다.
감사합니다.
'MSSQL' 카테고리의 다른 글
MSSQL 2008 R2 데이터베이스 로그 파일 사이즈 축소 하는 방법 (0) | 2013.05.10 |
---|---|
Microsoft SQL Server 2008 R2 - Reporting Service(리포팅 서비스)의 이해와 구성 방법 (0) | 2011.03.08 |
MSSQL 비밀번호 변경 방법(Change Password) (0) | 2010.12.27 |
Find Temp Table (임시 테이블 찾기) (0) | 2010.11.26 |
MSSQL IndexOf, LastIndexOf (0) | 2010.11.02 |