반응형
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 |