월본테이블 A
날짜(yyyymmdd) | 관람객1(cnt1) | 관람개2(cnt2) | 관람객3(cnt3) |
2017-07-03 | 25 | 25 | 25 |
2017-07-04 | 25 | 25 | 25 |
조회조건 yyyy ~ yyyy
출력화면
연도 | 월 | 화 | 수 | 목 | 금 | 토 |
2017 | 2017년도 1월~12월에서 월요일 관람객1,2,3 의합 | 2018년도 1월~12월에서 화요일 관람객1,2,3 의합 | 이하같음 | 이하같음 | 이하같음 | 이하같음 |
2018 | 2018년도 1월~12월에서 월요일 관람객1,2,3 의합 | 2018년도 1월~12월에서 화요일 관람객1,2,3 의합 | 이하같음 | 이하같음 | 이하같음 | 이하같음 |
뿌려지는 화면은 조회시 연도를 2016~2018년까지면 해당하는 년도만 뿌려져야되는데
쿼리정말 어려워서....ㅠㅠㅠ부탁드려요 기술자님들 ㅠㅠ
SELECT TO_CHAR( YMD, 'YYYY' ) YEAR , SUM(CASE WHEN TO_CHAR( YMD, 'D' ) = '2' THEN CNT1+CNT2+CNT3 END) "월" -- 월 , SUM(CASE WHEN TO_CHAR( YMD, 'D' ) = '3' THEN CNT1+CNT2+CNT3 END) "화" -- 화 , SUM(CASE WHEN TO_CHAR( YMD, 'D' ) = '4' THEN CNT1+CNT2+CNT3 END) "수" -- 수 , SUM(CASE WHEN TO_CHAR( YMD, 'D' ) = '5' THEN CNT1+CNT2+CNT3 END) "목" -- 목 , SUM(CASE WHEN TO_CHAR( YMD, 'D' ) = '6' THEN CNT1+CNT2+CNT3 END) "금" -- 금 , SUM(CASE WHEN TO_CHAR( YMD, 'D' ) = '7' THEN CNT1+CNT2+CNT3 END) "토" -- 토 FROM T GROUP BY TO_CHAR( YMD, 'YYYY' )
SELECT yyyy , SUM(DECODE(d, 1, cnt)) 일 , SUM(DECODE(d, 2, cnt)) 월 , SUM(DECODE(d, 3, cnt)) 화 , SUM(DECODE(d, 4, cnt)) 수 , SUM(DECODE(d, 5, cnt)) 목 , SUM(DECODE(d, 6, cnt)) 금 , SUM(DECODE(d, 7, cnt)) 토 FROM (SELECT SUBSTR(dt, 1, 4) yyyy , TO_CHAR(TO_DATE(dt, 'yyyy-mm-dd'), 'd') d , cnt1 + cnt2 + cnt3 cnt FROM t WHERE dt BETWEEN :s_yyyy || '-01-01' AND :e_yyyy || '-12-31' ) GROUP BY yyyy ORDER BY yyyy ;