본문 바로가기
MS SQL

MS SQL_PIVOT 사용법

by 디디찐 2022. 8. 3.
반응형

1. PIVOT 이란?

특정 행의 값들을 열로 변환해주는 함수

2. PIVOT 사용법

SELECT *
FROM (테이블 & 집계할 쿼리문)
PIVOT (그룹함수 (집계컬럼) FOR 피벗 대상 컬럼명 IN([피벗컬럼값],...) )
AS PIVOT_RESULT

 

✅그룹함수 =>SUM(), COUNT (), MAX(), MIN(), AVG()

✅피벗 대상 컬럼명 => 열로 변환하고자 하는 컬럼명

✅피벗 컬럼값 => 열로 변환하고자 하는 컬럼 값 (그룹화될 값)

3. PIVOT 사용예제

CREATE PROCEDURE [dbo].[SP_부서별 목표실적집계_PIVOT]
AS
BEGIN
SET NOCOUNT ON
     CREATE TABLE #목표
     (
        부서코드        NVARCHAR(10),
        담당자코드      NVARCHAR(10),
        목표금액        NUMERIC(18,0)
     )
 
     CREATE TABLE #매출(
        부서코드        NVARCHAR(10),
        담당자코드      NVARCHAR(10) ,
        매출금액        NUMERIC(18,0)
     )
     INSERT INTO #목표 (부서코드,담당자코드, 목표금액)VALUES ('A1','A1-1',100000);
     INSERT INTO #목표 (부서코드,담당자코드, 목표금액)VALUES ('A1','A1-2',200000);
     INSERT INTO #목표 (부서코드,담당자코드, 목표금액)VALUES ('A2','A2-1',300000);
     INSERT INTO #목표 (부서코드,담당자코드, 목표금액)VALUES ('A3','A3-1',400000);


     INSERT INTO #매출 (부서코드,담당자코드, 매출금액)VALUES ('A1','A1-1',90000);
     INSERT INTO #매출 (부서코드,담당자코드, 매출금액)VALUES ('A1','A1-2',150000);
     INSERT INTO #매출 (부서코드,담당자코드, 매출금액)VALUES ('A2','A2-1',250000);
     INSERT INTO #매출 (부서코드,담당자코드, 매출금액)VALUES ('A2','A2-2',100000);
     INSERT INTO #매출 (부서코드,담당자코드, 매출금액)VALUES ('A4','A4-1',200000);


 

#목표     /   #매출


피벗될 컬럼값 A1 / A2 / A3 / A4
#목표 테이블에는 컬럼 A4이 없고
#매출 테이블에는 컬럼 A3이 없다

SELECT 부서코드,
       금액 = SUM(목표금액),
       구분 = '목표금액'
  INTO #자료집계
  FROM #목표
 GROUP BY 부서코드
 UNION ALL
SELECT 부서코드,
       금액 = SUM(매출금액),
       구분 = '매출금액'
  FROM #매출
 GROUP BY 부서코드

#자료집계



구분 컬럼의 컬럼값 목표금액 / 매출금액

SELECT P.구분, 
        A1 = ISNULL(P.A1,0),
        A2 = ISNULL(P.A2,0),
        A3 = ISNULL(P.A3,0),
        A4 = ISNULL(P.A4,0)
   FROM #자료집계 A
  PIVOT (SUM(금액) FOR 부서코드 IN ([A1],[A2],[A3],[A4])) AS P

<최종 결과>

EXEC [SP_부서별 목표실적집계_PIVOT]
반응형

'MS SQL' 카테고리의 다른 글

MS SQL_LIKE 연산자 사용법  (0) 2022.08.17
MS SQL_CASE WHEN THEN 조건식사용법  (0) 2022.08.16
MS SQL_PARTION사용법  (0) 2022.08.02
MS SQL_사용자 정의 함수 사용법  (0) 2022.08.02
MS SQL_프로시저 사용법  (0) 2022.08.01