월별 주차별 데이터를 구하려고하는데요 5

by 손님 [Oracle 기초] [2012.10.19 14:47:36]



월별 주차별로  휴강여부를 조회하려고합니다.

년도 학기 과목코드 분반코드 휴강일자
2012 2  A100    01 20121002
2012 2  A100    01 20121005
2012 2  A100    01      20121015
2012 2   A100    01  20121101

년도,학기,과목코드,분반코드 가 key

위와같은 데이터가 있을때 제가 구하고 싶은 결과는
그 주차동안에 휴강데이터가 있다면 Y(옆에 카운트 표시),  없다면 N입니다.
해당월의 모든 주차에 휴강여부는 반드시 표시해주어야하구요
한주에

따라서
년도 학기 과목코드 분반코드 월  1주차 2주차 3주차 4주차 5주차
2012 2   A100   01   10  Y(2)   N   Y(1)    N    N
2012 2  A100   01   11  Y(1)   N   N     N    N


이렇게 나오게 하고싶은데 고수님들 좀 도와주십시오.
by 장비 [2012.10.19 16:09:51]
WITH T AS ( 
SELECT '2012' AS 년도 , '2' AS 학기 ,'A100' AS 과목  ,'01' AS 분반 ,'20121002' AS 휴강 FROM DUAL 
UNION ALL SELECT '2012', '2' ,'A100'  ,'01' ,'20121005' FROM DUAL 
UNION ALL SELECT '2012', '2' ,'A100'  ,'01' ,'20121015' FROM DUAL 
UNION ALL SELECT '2012', '2' ,'A100'  ,'01' ,'20121101' FROM DUAL 
)
SELECT 년도, 학기 , 과목, 분반 , SUBSTR(휴강,5,2) AS 월
   , REPLACE('Y('||SUM(DECODE( WEEK , 1 , 1))||')','Y()','N') "1주차"
   , REPLACE('Y('||SUM(DECODE( WEEK , 2 , 1))||')','Y()','N') "2주차"
   , REPLACE('Y('||SUM(DECODE( WEEK , 3 , 1))||')','Y()','N') "3주차"
   , REPLACE('Y('||SUM(DECODE( WEEK , 4 , 1))||')','Y()','N') "4주차"
   , REPLACE('Y('||SUM(DECODE( WEEK , 5 , 1))||')','Y()','N') "5주차"
 FROM (
    SELECT T.*
       , CASE WHEN TO_CHAR( NEXT_DAY( TO_DATE( T.휴강) , 1) , 'MM') = TO_CHAR( TO_DATE (T.휴강), 'MM') THEN 
             CEIL(TO_NUMBER( (TO_CHAR( NEXT_DAY( TO_DATE( T.휴강) , 1),'DD'))) /7) 
          ELSE 5 
        END AS WEEK 
     FROM T
 )
 GROUP BY 년도, 학기 , 과목, 분반, SUBSTR(휴강,5,2)
 

by 손님 [2012.10.19 16:20:12]

와우...정말 감사드립니다.
오늘도 배워서 갑니다^^

by 손님 [2012.10.19 16:55:28]
with t as
( select '2012' 년도, '2' 학기, 'A100' 과목코드, '01' 분반코드, '20121002' 휴강일자 from dual union all
 select '2012', '2', 'A100', '01', '20121005' from dual union all
 select '2012', '2', 'A100', '01', '20121015' from dual union all
 select '2012', '2', 'A100', '01', '20121101' from dual
)
   
select 년도 
   , 학기
   , 과목코드
   , 분반코드
   , substr(휴강일자, 5, 2) 월
   , replace('Y('||count(decode(to_char(to_date(휴강일자, 'yyyymmdd'), 'w'), 1, 1))||')','Y(0)','N') "1주차"
   , replace('Y('||count(decode(to_char(to_date(휴강일자, 'yyyymmdd'), 'w'), 2, 1))||')','Y(0)','N') "2주차"
   , replace('Y('||count(decode(to_char(to_date(휴강일자, 'yyyymmdd'), 'w'), 3, 1))||')','Y(0)','N') "3주차"
   , replace('Y('||count(decode(to_char(to_date(휴강일자, 'yyyymmdd'), 'w'), 4, 1))||')','Y(0)','N') "4주차"
   , replace('Y('||count(decode(to_char(to_date(휴강일자, 'yyyymmdd'), 'w'), 5, 1))||')','Y(0)','N') "5주차"
from t
group by 년도, 학기, 과목코드, 분반코드, substr(휴강일자, 5, 2)
order by 년도, 학기, 과목코드, 분반코드, substr(휴강일자, 5, 2)   
;    

by 장비 [2012.10.19 17:12:17]

주차 구하는 키워드 있었군요  'W' 

배워가네요


by kj2hw [2012.10.19 17:33:48]

저도 얼른 공부해서 답글 팍팍 달아드리고 싶네요 ㅋㅋ 오늘도 좋은 공부 하고 갑니다.

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