Loading...

DB/Oracle / / 2022. 2. 11. 13:34

DB 36강. PIVOT ★

반응형

PIVOT함수는 오라클만 가지고 있다.

 

우리가 아는 달력의 모양은

아래 사진과 같다.

 

달력 테이블에서 데이터를 확인하면 아래와 같이 나온다.

SELECT *
FROM cal;

데이터는 저장될 때 세로로 저장되기 때문이다.

 

세로 데이터를 가로 데이터로

예쁘게 바꿔 줄 때 PIVOT을 사용한다.

 


PIVOT의 원리는 DECODE이다.

 

새로운 컬럼을 만들어 줄 때 이렇게 사용했었다.

-- 가짜 컬럼에 날짜(NUM_DAY)만 붙여넣으면 끝
SELECT week, 
1 일,
2 월,
3 화,
4 수,
5 목,
6 금,
7 토
FROM cal
GROUP BY week
ORDER BY week;

 

우리는 날짜 데이터를 넣고 싶으니까

decode를 사용해준다.

-- 일요일이면 num_day 뿌리고 아니면 null 뿌려
SELECT week,
decode(day, '일', num_day),
decode(day, '월', num_day),
decode(day, '화', num_day),
decode(day, '수', num_day),
decode(day, '목', num_day),
decode(day, '금', num_day),
decode(day, '토', num_day)
FROM cal;

첫째 주에 day가 '일'이면 데이터 출력,

아니면 null 출력하는 코드이다.

 

week로 GROUP BY를 해주고

null이 중복되는 데이터를 찌그러트리면

컬럼을 한 줄로 만들 수 있을 것 같다.

 

-- 데이터를 컬럼으로 끌어올리기 위해 별칭 사용
-- PIVOT의 원리는 decode
-- 그룹별 짜부!
SELECT week,
sum(decode(day, '일', num_day)) 일,
sum(decode(day, '월', num_day)) 월,
sum(decode(day, '화', num_day)) 화,
sum(decode(day, '수', num_day)) 수,
sum(decode(day, '목', num_day)) 목,
sum(decode(day, '금', num_day)) 금,
sum(decode(day, '토', num_day)) 토
FROM cal
GROUP BY week
ORDER BY week;

 

 


이 과정을 PIVOT 함수를 사용해

한줄로 예쁘게 만들 수 있다.

-- PIVOT 함수사용
-- PIVOT (짜부시킬것 FOR 칼럼에 올릴 데이터 in (칼럼 값))
SELECT *
FROM cal
PIVOT (sum(num_day) FOR day in ('일', '월', '화', '수', '목', '금', '토'))
ORDER BY week;

 

 

 

[출처]

 

https://cafe.naver.com/metacoding

 

메타코딩 : 네이버 카페

코린이들의 궁금증

cafe.naver.com

 

메타 코딩 유튜브

https://www.youtube.com/c/%EB%A9%94%ED%83%80%EC%BD%94%EB%94%A9

 

메타코딩

문의사항 : getinthere@naver.com 인스타그램 : https://www.instagram.com/meta4pm 깃헙 : https://github.com/codingspecialist 유료강좌 : https://www.easyupclass.com

www.youtube.com

 

반응형