코드값 날짜로 만들어주기 0 2 1,521

by 쌈장묵자 [SQL Query] [2016.01.27 13:49:38]


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을 쓰면 될꺼 같긴한데;;

by 창조의날개 [2016.01.27 14:30:08]

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
;

 


by 쌈장묵자 [2016.02.01 00:13:06]

답변이 늦었습니다 많음 도움 됬습니다 감사합니다 ㅎㅎ

댓글등록
SQL문을 포맷에 맞게(깔끔하게) 등록하려면 code() 버튼을 클릭하여 작성 하시면 됩니다.
로그인 사용자만 댓글을 작성 할 수 있습니다. 로그인, 회원가입