[MS-SQL] PIVOT문 / PIVOT 사용예제

진지니·2022년 7월 15일
0

MS SQL

목록 보기
4/4

PIVOT 이란?

행을 열로 변환해주는 함수

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

  • 그룹함수 =>SUM(), COUNT (), MAX(), MIN(), AVG()
  • 피벗 대상 컬럼명 => 열로 변환하고자 하는 컬럼명
  • 피벗 컬럼값 => 열로 변환하고자 하는 컬럼 값(그룹화될 값)

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


profile
초보 개발자의 정면돌파

0개의 댓글