SQL 질문과 답변 게시판
Microsoft SQL Server와 관련된 질문과 답변을 올리는 게시판입니다. 궁금하신 내용을 이곳에서 문의하시면 SQLER 분들의 답변을 받으실 수 있습니다. 문의를 하실때에는 최근 작업하신 특이 사항이나, 장애 발생 전 상황을 상세히 올려 주시면 답글을 적어주시는 SQLER분들의 답변이 더 정확할 수 있으니 도움 되시길 바랍니다. 쿼리 문의일 경우, 실제 문제가 재현되는 테이블생성, 샘플데이터 생성 쿼리를 함께 올려 주시면 더 빠르고 정확한 쿼리 문의 응답이 가능합니다.
글 수 5,489
안녕하십니까.
날짜별 항목별 값을 항목으로 행/열 전환 하려 합니다.
날짜, 항목, 값
1월1일 , 사과, 100
1월1일, 포도, 200
1월1일, 자두, 300
1월2일, 사과, 110
1월2일, 배 , 220
1월2일, 포도, 330
처럼 있는데 일짜별 항목이 고정으로 나오지 않습니다.
사과, 포도, 자두, 배,
1월1일, 100, 200, 300, null
1월2일, 110, 330, null, 220
처럼 뽑으려 할때, PIVOT 이나 Case When 으로 하려니.
항목을 다 알아야 되서 어떻게 해야 할지 난감합니다..
유동적인 항목명을 컬럼으로 행/열 전환 하여 일별 값을 볼 수
있는 좋은 방법 조언 바랍니다.
행복한 하루 되세요.

성대중(지우아빠)

dynamic pivot 으로 찾아 보세요..
http://www.sqler.com/133535
CREATE TABLE #MyTempTable
(
[날짜] VARCHAR(10) ,
[항목] VARCHAR(10) ,
[값] INT
) ;
INSERT INTO #MyTempTable VALUES ( '1월1일', '사과', 100 ) ;
INSERT INTO #MyTempTable VALUES ( '1월1일', '포도', 200 ) ;
INSERT INTO #MyTempTable VALUES ( '1월1일', '자두', 300 ) ;
INSERT INTO #MyTempTable VALUES ( '1월2일', '사과', 110 ) ;
INSERT INTO #MyTempTable VALUES ( '1월2일', '배', 220 ) ;
INSERT INTO #MyTempTable VALUES ( '1월2일', '포도', 330 ) ;
DECLARE @COLS VARCHAR(8000) = '' ;
DECLARE @SQL VARCHAR(8000) ;
WITH TBL_CTE
AS ( SELECT [항목]
FROM #MyTempTable
GROUP BY [항목]
)
SELECT @COLS = @COLS + ',[' + CAST([항목] AS VARCHAR(100)) + ']'
FROM TBL_CTE ;
SELECT @COLS = STUFF(@COLS, 1, 1, '')
SET @SQL = '
SELECT [날짜],' + @COLS + '
FROM
(
SELECT [항목],[값], [날짜]
FROM #MyTempTable
) AS P
PIVOT
(
sum([값])
FOR [항목] IN
(' + @COLS + ')
) AS PVT
'
EXEC (@SQL)
GO