[ PIVOT ] 행을 열로 바꾸기

2022. 2. 15. 14:33Database/MSSQL

프로젝트 시, 조회기간 일자별 통계 데이터 추출할 때 사용했었다.

 

 

[ PIVOT ]

SELECT *

FROM ( PIVOT 대상 쿼리문 ) AS A

PIVOT ( 그룹함수(기준컬럼) FOR 대상컬럼 IN ([],[]...) AS B

 

[ UNPIVOT ]
WITH [PIVOT_TABLE] AS
(
SELECT...
)
SELECT [컬럼]
FROM PIVOT_TABLE 
UNPIVOT ( [컬럼] FROM [기준컬럼] IN ([컬럼]...)) AS [PIVOT명]

 

 

ex)

DECLARE @SQL  NVARCHAR(MAX) = ''
,@SQL1  NVARCHAR(MAX) = ''

SELECT  @SQL = @SQL + '[' + CONVERT(VARCHAR, A.CDATE+A.ADDNUM) + '],',
@SQL1 = @SQL1 + '[' + CONVERT(VARCHAR, A.CDATE+A.ADDNUM) + ']+'
FROM  (
SELECT  CONVERT(INT, DATEPART(DAY, @P_RQSHPD_FR)) AS CDATE, NUMBER AS ADDNUM
FROM  MASTER..SPT_VALUES
WHERE  TYPE = 'P'
AND  NUMBER <= CASE WHEN DATEDIFF(D, @P_RQSHPD_FR, @P_RQSHPD_TO) > 31 THEN 31 ELSE DATEDIFF(D, @P_RQSHPD_FR, @P_RQSHPD_TO) END
) A
ORDER BY CDATE

SET @SQL = SUBSTRING(@SQL, 0, LEN(@SQL))
SET @SQL1 = SUBSTRING(@SQL1, 0, LEN(@SQL1))

 

 

ex) 

SELECT  *
, [1]+[2]+[3]+[4]+[5]+[6]+[7]+[8]+[9]+[10]+[11]+[12]+[13]+[14]+[15]+[16]+[17]+[18]+[19]+[20]+[21]+[22]+[23]+[24]+[25]+[26]+[27]+[28] AS VHCFNO_SUM
, ([1]+[2]+[3]+[4]+[5]+[6]+[7]+[8]+[9]+[10]+[11]+[12]+[13]+[14]+[15]+[16]+[17]+[18]+[19]+[20]+[21]+[22]+[23]+[24]+[25]+[26]+[27]+[28]) * WGTHPO AS WGTHPO_SUM
FROM  (
SELECT  DATEPART(DD, A.DATE) AS RQSHPD
,A.VHCFNO
FROM  A (NOLOCK)
WHERE  1=1
AND  A.RQSHPD BETWEEN '20220201' AND '20220228'
) A
PIVOT (COUNT(VHCFNO) FOR RQSHPD IN ([1],[2],[3],[4],[5],[6],[7],[8],[9],[10],[11],[12],[13],[14],[15],[16],[17],[18],[19],[20],[21],[22],[23],[24],[25],[26],[27],[28])) B
ORDER BY PTRCVR

'Database > MSSQL' 카테고리의 다른 글

DISTINCT vs GROUP BY  (0) 2022.02.15
[ STUFF / FOR XML PATH ] 여러행 하나의 행으로 합치는 방법  (0) 2022.02.15
CURSOR  (0) 2022.02.15
MSSQL TIps  (0) 2022.02.15
PROCEDURE Tips  (0) 2022.02.15