본문 바로가기
개발/데이터베이스

Oracle 피봇(Pivot) 테이블 사용하기

by kakk789 2023. 4. 19.

오라클 Pivot

  • 행, 열 데이터를 서로 전환
  • 11g부터 사용가능
  • 집계함수를 이용해야함

1. 아래와 같은 테이블 구조가 있다고 가정

테이블명 : test_table

2. 동작 설명

1. test_table에서 각각 ft_cd, ft_nm 컬럼을 select 
2. PIVOT을 사용하여 쿼리 결과를 행-열 방식으로 변환
3. IN 문 안의 내용이 컬럼명이 됨
4. 동시에 해당 값을 찾아 ROW 값으로 출력 됌.
SELECT
	ft_nm_01,
	ft_nm_02,
	ft_nm_03,
	ft_nm_04,
	ft_nm_05
FROM
(
    SELECT
        ft_cd,
        ft_nm
    FROM
        test_table
) a PIVOT (
        MAX(ft_nm)
        FOR ft_cd
        IN (
        '1' AS ft_nm_01,
        '2' AS ft_nm_02,
        '3' AS ft_nm_03,
        '4' AS ft_nm_04,
        '5' AS ft_nm_05
    )
);

3. 결과

Tip

1. 추가로 IN 절에 서브쿼리를 넣는 방식도 존재함

  • 단 이럴경우 PIVOT XML 형식을 사용 해야함
  • select 시 받는 형식을 XML에서 다른 타입으로 변환 (varchar 등) 해야하므로 나중에 검색하여 알아볼 것
  • 참고 URL : https://dejavuhyo.github.io/posts/oracle-pivot/

2. 만약 MAX(집계함수 절)에 Alias 를 줬다면?

  • 컬럼명에 해당 alias 명칭이 따라 붙게됌
예시) MAX(ft_nm) as TTT

: 컬럼명
     - FT_NM_01_TTT    <-- 이런식으로

 

반응형

댓글