반응형
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
메타 코딩 유튜브
https://www.youtube.com/c/%EB%A9%94%ED%83%80%EC%BD%94%EB%94%A9
반응형