오늘은 캘린더 테이블로 달력모양으로 출력하는 걸 해보겠습니다.
sql developer에서
SELECT * FROM CAL;
을 입력하면 아래와 같이 뜹니다.
이걸
이런식으로 출력해보겠습니다.
우선,
DECODE 함수를 사용해서 출력해보겟습니다.
SELECT
DECODE(DAY, 'SUN', DAYNO) "SUN"
, DECODE(DAY, 'MON', DAYNO)"MON"
, DECODE(DAY, 'TUE', DAYNO) "TUE"
, DECODE(DAY, 'WED', DAYNO) "WED"
, DECODE(DAY, 'THU', DAYNO) "THU"
, DECODE(DAY, 'FRI', DAYNO) "FRI"
, DECODE(DAY, 'SAT', DAYNO) "SAT"
FROM CAL;
이렇게 DAY가 해당 요일을 뜻하는 영단어와 동일 할 경우 해당 DAYNO을 출력하게 했습니다.
출력하면,
이런식으로 출력이 되는데 여기서 NULL 값을 지워줘야 합니다.
NULL 값을 지워주기 위해서 GROUP함수를 사용합니다.
GROUP 함수에는
COUNT(COL) = 갯수
MAX(COL) = 최대값
MIN(COL) = 최솟값
SUM(COL) = 합
AVG(COL) =평균
STDDEV(COL) = 표준편차
VARIANCE(COL) = 분산
이런 함수들이 존재합니다.
우선 해당 값을 MAX 또는 MIN으로 묶어주도록합니다.
MAX와 MIN으로 묶으면 NULL값은 사라지고 해당 값이 나옵니다.
저는 MIN으로 묶어보겠습니다.
SELECT
MIN(DECODE(DAY, 'SUN', DAYNO)) "SUN"
, MIN(DECODE(DAY, 'MON', DAYNO))"MON"
, MIN(DECODE(DAY, 'TUE', DAYNO)) "TUE"
, MIN(DECODE(DAY, 'WED', DAYNO)) "WED"
, MIN(DECODE(DAY, 'THU', DAYNO)) "THU"
, MIN(DECODE(DAY, 'FRI', DAYNO)) "FRI"
, MIN(DECODE(DAY, 'SAT', DAYNO)) "SAT"
FROM CAL;
이대로 누르면
이런 식으로 나오게 됩니다.
(MIN 값이 나오지 않는 이유는 현재 DAYNO 컬럼이 문자열 형태로 저장되어 있어서 ASC코드의 최대값이 출력되기 때문입니다.)
위 값들을 GROUP BY WEEKNO로 분류해줍니다.
SELECT
MIN(DECODE(DAY, 'SUN', DAYNO)) "SUN"
, MIN(DECODE(DAY, 'MON', DAYNO))"MON"
, MIN(DECODE(DAY, 'TUE', DAYNO)) "TUE"
, MIN(DECODE(DAY, 'WED', DAYNO)) "WED"
, MIN(DECODE(DAY, 'THU', DAYNO)) "THU"
, MIN(DECODE(DAY, 'FRI', DAYNO)) "FRI"
, MIN(DECODE(DAY, 'SAT', DAYNO)) "SAT"
FROM CAL
GROUP BY WEEKNO;
실행 하면
이렇게 달력 형태로 나오지만 역시 정렬이 되어 있지 않습니다.(위의 ASC코드와 같은이유로)
이럴 정렬하기 위해 ORDER BY 를 해주면
원하는 형태로 출력이 됩니다.
전체쿼리↓↓
이상으로 CAL테이블로 달력 출력하기 였습니다.
'개발 > OracleDB' 카테고리의 다른 글
[SQL] 문제풀이, JOIN (0) | 2021.04.20 |
---|---|
[ORACLE]테이블 제약 조건 확인 (0) | 2021.04.06 |
[ORACLE/SQL] 테이블 관련 문제 정리 (0) | 2021.04.06 |
[ORACLE]오라클 SQL Developer 설치 및 연결 (0) | 2021.03.13 |