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 |
출력 결과
'전체 > 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 |