오라클(oracle) pivot, unpivot 함수 활용 예제
안녕하세요.
오늘은 pivot, unpivot 함수를 정리해볼까 합니다.
pivot 함수는 row단위를column단위로 변경해주는 함수입니다.
unpivot 함수는 pivot의 역순이라고 생각하시면 됩니다.
예제를 통해 알아보겠습니다.
현재 테이블 현황 입니다.
직원 휴가 현황입니다.
제가 보고싶은 것은 월별 휴가현황을 보고싶습니다.
이때 pivot 함수를 활용하여 월별 휴가현황을 확인해 보겠습니다.
select * from (select user_nm, month, h_day from h_sts ) pivot ( sum(h_day) for month in ( '1' as "1", '2' as "2", '3' as "3", '4' as "4", '5' as "5", '6' as "6", '7' as "7", '8' as "8", '9' as "9", '10' as "10", '11' as "11", '12' as "12" ) );
처음 select 부분의 * 이 부분의 컬럼은 아래의 in 절의 항목과, user_nm 입니다.
pivot 부분에 그룹함수를 적습니다.(확인하고자 하는 데이터)
저는 sum으로 했지만 count를 활용하여 개수를 체크하는데 사용하시면 됩니다.
for 부분에 그루핑을 할 칼럼 이름과 in 뒷부분에는 분류할 목록을 적어줍니다.
in절 뒷부분이 항목들로 활용됩니다.(컬럼)<--활용하다보면 계속 헷갈리네요
하면서 아직 헷갈리네요..
저도 제가 적은걸 보고 사용해야 할 것 같습니다.
위의 결과를 보시면 null값으로 출력되고 있습니다.
null 값을 다른 값으로 치환해보겠습니다.
아래의 쿼리 입니다.
select user_nm, nvl("1",0) "1", nvl("2",0) "2", nvl("3",0) "3", nvl("4",0) "4", nvl("5",0) "5", nvl("6",0) "6", nvl("7",0) "7", nvl("8",0) "8", nvl("9",0) "9", nvl("10",0) "10", nvl("11",0) "11", nvl("12",0) "12" from (select user_nm, month, h_day from h_sts ) pivot ( sum(h_day) for month in ( '1' as "1", '2' as "2", '3' as "3", '4' as "4", '5' as "5", '6' as "6", '7' as "7", '8' as "8", '9' as "9", '10' as "10", '11' as "11", '12' as "12" ) );
쿼리를 보시면 컬럼에 nvl 함수를 적용하였습니다.
"1", "2"~~ 이런것들이 컬럼으로 활용되고 있습니다.
적다보니 헷갈릴수 있다는 생각이 드네요.
select * from pivot_t unpivot ( h_day for month in (month_01,month_02,month_03,month_04,month_05,month_06,month_07,month_08,month_09,month_10,month_11,month_12) ) ;
'개발 > DB' 카테고리의 다른 글
[oracle]오라클 시퀀스(sequence) 생성 및 삭제 (0) | 2019.12.03 |
---|---|
[오라클] 인덱스의 주의사항 및 관리방법(쿼리문 확인) (0) | 2019.12.03 |
[오라클] 인덱스의 원리 및 개념과 종류(B-TREE, BITMAP INDEX) (6) | 2019.11.30 |
오라클(oracle) rank(), row_number() 순위함수 사용 예제 (2) | 2019.11.13 |
데이터베이스(DB) 정규화(1차,2차,3차) (0) | 2019.11.10 |
drop, delete, truncate 차이점 및 개념 이해하기 (4) | 2019.11.06 |
파티션 종류 및 개념 알아보기(Hash Partition, List partition, composite partition) (0) | 2019.11.05 |