1. oracle pivot 사용 행을 열로 바꿔 달력 만들기



1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
-- 1. PIVOT 사용 행을 열로 바꾸기
SELECT SUN, MON, TUE, WED, THU, FRI, SAT
  FROM (
        SELECT TRUNC(DT + LEVEL-1'D') AS WEEK -- 현재 날짜 주의 시작 요일로 잘라버림
             , TO_CHAR(DT + LEVEL-1'D') AS DW -- 17-06-01부터 DAY값 일-토 1-7 값 매김
             , LPAD(LEVEL, 2'0') AS DD -- LEVEL의 1-9까지 0 채워줌
          FROM (
--                SELECT TRUNC(SYSDATE,'MM') AS DT -- 현재 달의 첫번째 날 구함
                SELECT TO_DATE('20170601','YYYYMMDD') AS DT
                  FROM DUAL
               )
       CONNECT BY LEVEL <= TO_CHAR(LAST_DAY(SYSDATE),'DD'-- 현재 날짜의 마지막 날인 YYYY-MM-DD를 구해 DD만 뽑음 30
       )
 PIVOT (MAX(DD) FOR DW IN ('1' AS SUN, '2' AS MON, '3' AS TUE, '4' AS WED, '5' AS THU, '6' AS FRI, '7' AS SAT)) -- 그룹으로 관리할 컬럼 지정 그룹함수 사용가능 MAX(DD), 기준이 되는 컬럼 DW, 기준이 되는 컬럼 구성하기 위한 값 정의 IN()
-- PIVOT (MAX(DD) FOR DW IN (1 SUN, 2 MON, 3 TUE, 4 WED, 5 THU, 6 FRI, 7 SAT)) 
 ORDER BY WEEK;
cs


출력 결과





2. oracle 분석 함수 사용(MAX, MIN...) 행을 열로 바꿔 달력 만들기



1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
-- 2. 분석함수 사용 행을 열로 바꾸기
SELECT MAX(DECODE(DW,'1', DD)) 일 
     , MAX(DECODE(DW,'2', DD)) 월
     , MAX(DECODE(DW,'3', DD)) 화
     , MAX(DECODE(DW,'4', DD)) 수
     , MAX(DECODE(DW,'5', DD)) 목
     , MAX(DECODE(DW,'6', DD)) 금
     , MAX(DECODE(DW,'7', DD)) 토
  FROM (
        SELECT TRUNC(DT + LEVEL-1'D') AS WEEK 
             , TO_CHAR(DT + LEVEL-1'D') AS DW 
             , LPAD(LEVEL, 2'0') AS DD 
          FROM (
                SELECT TRUNC(SYSDATE,'MM') AS DT 
                  FROM DUAL
               )
       CONNECT BY LEVEL <= TO_CHAR(LAST_DAY(SYSDATE),'DD'
       )
 GROUP BY WEEK -- 주 단위로 그룹 지음
 ORDER BY WEEK;
cs

출력 결과



다음과 같이 pivot(oracle 11g 사용가능), 분석함수를 이용해 행을 열로 바꿔 달력을 표현할 수 있다.




'전체 > Oracle' 카테고리의 다른 글

ORACLE INDEX  (0) 2017.06.12
ORACLE VIEW  (0) 2017.06.12
ORACLE PIVOT과 UNPIVOT 정리  (2) 2017.06.09
ORACLE 정규표현식 SUBSTR, REPLACE, INSTR, DECODE, TRIM 사용하기  (2) 2017.06.05
ORACLE 계층형 쿼리 만들기  (0) 2017.06.05

+ Recent posts