Subject란 테이블에
SUBJECT_NO | YEAR | QUAR | TERM |
1 | 2016 | 01 | 002 |
2 | 2016 | 02 | 003 |
3 | 2016 | 03 | 004 |
여기서 QUAR칼럼은 01은 1분기 시작 02는 2분기 시작 03은 3분기 시작
TERM은 002 3개월 003은 6개월~1년 004는 2년을 뜻합니다
이 테이블과 RECOMMEND 테이블에
NAME | SUBJECT_NO | SIGI |
KIM | 1 | 20160729 |
PARK | 2 | 20170217 |
JUNG | 3 | 20160302 |
이런식으로 선생님 추천 과목 시기가 있습니다
SUBJECT_NO는 같지만 선생님 추천 시기에 그 강좌가 열릴수도 있고 안열릴수도 있습니다
선생님이 추천해준 시기에 그 강좌가 열려서 수강신청하면 하루라도 걸쳐 있으면 선발시 가산점 1점을 주고 추천 시기가 아닌 날짜에 강좌를 신청하면 가산점이 없는 쿼리를
짤려고 하는데 SUBJECT 테이블 날짜가 YEAR QUAR TERM 3개의 칼럼으로 나눠져 있어서 어떻게 날짜를 맞춰야 할지
모르겠네요 CASE문과 BETWEEN을 쓰면 될꺼 같긴한데;;
WITH Subject(SUBJECT_NO, YEAR, QUAR, TERM) AS( SELECT 1, '2016', '01', '002' FROM DUAL UNION ALL SELECT 2, '2016', '02', '003' FROM DUAL UNION ALL SELECT 3, '2016', '03', '004' FROM DUAL ) , RECOMMEND(NAME, SUBJECT_NO, SIGI) AS ( SELECT 'KIM', 1, '20160729' FROM DUAL UNION ALL SELECT 'PARK', 2, '20170217' FROM DUAL UNION ALL SELECT 'JUNG', 3, '20160302' FROM DUAL ) SELECT AA.NAME, AA.SUBJECT_NO, AA.SIGI , CASE WHEN AA.SIGI BETWEEN BB.YEAR||DECODE(BB.QUAR, '01', '0101', '02','0401','03','0701','1001') AND TO_CHAR(LAST_DAY(ADD_MONTHS(TO_DATE(BB.YEAR||DECODE(BB.QUAR, '01', '0101', '02','0401','03','0701','1001'),'YYYYMMDD') ,TO_NUMBER(DECODE(BB.TERM,'002','3','003','12','004','24'))+3)), 'YYYYMMDD') THEN '1' ELSE '0' END AS 가산점 FROM RECOMMEND AA , Subject BB WHERE AA.SUBJECT_NO = BB.SUBJECT_NO ;