본문 바로가기
MS-SQL/Query

[MSSQL] PIVOT을 이용하여 행과 열을 변경하여 출력 , FOR문 안의 IN 동적으로 설정해보기

by Hwoarang757 2015. 4. 1.

 

 -- PIVOT 문을 실행시킬 동적 쿼리문

  DECLARE @EXCUTESQL NVARCHAR(MAX)

-- PIVOT FOR 문에 들어갈 필드의 값

  DECLARE @DYNAMICDATE_STR NVARCHAR(MAX)

-- 시작일자

  DECLARE @STARTDATE DATETIME

-- 종료일자

  DECLARE @ENDDATE DATETIME

 

  SET @STARTDATE ='20150401'

  SET @ENDDATE = '20150430'

 

  SET @DYNAMICDATE_STR =''

 

-- while문을 이용하여 For문 안의 들어갈 필드 문장 구성

  WHILE (@STARTDATE <= @ENDDATE)

  BEGIN

 

SET @DYNAMICDATE_STR = @DYNAMICDATE_STR + '[' + CONVERT(NVARCHAR(8),@STARTDATE ,112) + '],'

SET @STARTDATE = DATEADD(DAY,1,@STARTDATE)

 

  END

 

 

  SET @EXCUTESQL = '

 

  SELECT * FROM

  (

  SELECT  DATE , SQTY , PQTY FROM TESTTABLE

  ) AS DATA

  PIVOT

  (

       SUM(SQTY)

       FOR DATE IN (' + @DYNAMICDATE_STR +')

 

  ) AS PIVOTT

 '

 

-- 마지막문장에 ','를 없애줍니다.

  SELECT @EXCUTESQL = REPLACE(@EXCUTESQL , '[' + CONVERT(NVARCHAR(8),@ENDDATE,112) + '],' , '[' + CONVERT(NVARCHAR(8),@ENDDATE,112) + ']' )

 

 

 

  EXEC SP_EXECUTESQL @EXCUTESQL