오라클 쿼리 질문이요 ㅠㅠ 0 7 898

by 즐라탄빡쳤다 [DB 기타] [2018.07.04 13:52:40]


월본테이블 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년까지면 해당하는 년도만 뿌려져야되는데

 

쿼리정말 어려워서....ㅠㅠㅠ부탁드려요 기술자님들 ㅠㅠ

by 신이만든지기 [2018.07.04 14:26:48]
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' )  

 


by 즐라탄빡쳤다 [2018.07.04 17:30:49]

ORA-01481: 숫자 형식 모델이 부적합합니다 이런오류가 뜨네요 ㅠㅠㅠ


by 마농 [2018.07.04 14:37:58]
SELECT *
  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'
        )
 PIVOT (SUM(cnt) FOR d IN (1 일, 2 월, 3 화, 4 수, 5 목, 6 금, 7 토))
;

 


by 즐라탄빡쳤다 [2018.07.04 17:31:13]

제꺼 오라클이 11g이하라서 PIVOT적용이 안됀다네요 ㅠㅠ


by 마농 [2018.07.04 17:43:46]
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
;

 


by 즐라탄빡쳤다 [2018.07.04 17:50:27]

대박....감사합니다 ㅠㅠㅠ

근데 

 WHERE dt BETWEEN :s_yyyy || '-01-01'

                      AND :e_yyyy || '-12-31'

이부분에서 아규먼트에 2017, 2018값을 넣으니깐 

결과값은 2017년도까지밖에 안나오는데 왜그러는건가요?


by 마농 [2018.07.04 17:54:34]

글쎄요?
날짜 컬럼의 데이터타입과 표현형식을 확인하세요.
입력값이 정확한지 확인하세요.

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