CASE WHEN 으로 Pivot Table 만들기

SANG HUN SHON·2023년 1월 26일
0
post-thumbnail

MySQL의 CASE WHEN 으로 Pivot Table 만드는 예제.

Pivot Table이란?
Row에 있는 값들을 Column으로 변형 한 테이블

예제)
manager 테이블

피벗 테이블

  1. manager 테이블의 부서 코드(department_id)를 기준으로 Pivot Table로 변환.
  2. 변환 한 Pivot Table의 컬럼명은 부서1, 부서2, 부서3, 부서4 순으로 표현한다.
  3. 각 부서에 속하는 첫번째 직원 ID들끼리 한 행에 출력한다.
-- employee_id로 부서별로 첫번째로 오는 employee_id, 두번째로 오는 employee_id,  N번째로 오는 employee_id을 알아내기 위해 변수 설정
SET @d001_CNT = 0, @d002_CNT = 0, @d003_CNT = 0, @d004_CNT = 0;

-- 문자열의 알파벳순서에서 최솟값(MIN)은 A(a)로 시작하는 것을 추출
SELECT MIN(d001) AS 부서1, 
	MIN(d002) AS 부서2, 
    MIN(d003) AS 부서3,
    MIN(d004) AS 부서4
FROM (SELECT CASE WHEN department_id = 'd001' THEN employee_id END AS d001,
		CASE WHEN department_id = 'd002' THEN employee_id END AS d002,
		CASE WHEN department_id = 'd003' THEN employee_id END AS d003,
		CASE WHEN department_id = 'd004' THEN employee_id END AS d004,
		CASE 
			WHEN department_id = 'd001' THEN (@d001_CNT:= @d001_CNT + 1)
			WHEN department_id = 'd002' THEN (@d002_CNT:= @d002_CNT + 1)
			WHEN department_id = 'd003' THEN (@d003_CNT:= @d003_CNT + 1)
			WHEN department_id = 'd004' THEN (@d004_CNT:= @d004_CNT + 1)
		END AS ROW_NUM
	FROM manager
    ORDER BY employee_id
) T
GROUP BY ROW_NUM;
profile
개발이 너무 좋아요

0개의 댓글