오라클쿼리 문의합니다..^^;; 마농님(꼭봐주세요..^^;;) 0 2 2,133

by 스물일곱 [2008.06.19 09:12:42]


안녕하세요.

오라클쿼리 문의를 좀 하겠습니다. 너무 자주물어보는거 같아서...죄송..;;

이게 어제 마농님께서 해주신 쿼리 입니다.

SELECT --S_BUYELIST
 B.C_CODE C_CODE --조직코드
    , B.DEPT_CODE DEPT_CODE --부서코드
    , F_TEC_GETDEPTNAME(’2000’,DEPT_CODE) DEPT_CODE_2000 --부서코드 2000
    , F_TEC_GETDEPTNAME(’3000’,DEPT_CODE) DEPT_CODE_3000 --부서코드 3000
    , COUNT(*) CNT_TOTAL --총건수
    , NVL(SUM(A.SUMM_CHAR_AMOU),0) AMT_TOTAL --총공급가액
    , COUNT(DECODE(A.MANA_PROC_STAT,’800’,1)) CNT_SIGN --업체인증건수
    , NVL(SUM(DECODE(A.MANA_PROC_STAT,’800’,A.SUMM_CHAR_AMOU)),0) AMT_SIGN --업체인증금액
    , COUNT(DECODE(A.MANA_PROC_STAT,’200’,1)) CNT_NOTE --수기인증건수
    , NVL(SUM(DECODE(A.MANA_PROC_STAT,’200’,A.SUMM_CHAR_AMOU)),0) AMT_NOTE --수기인증금액
    , COUNT(DECODE(A.MANA_PROC_STAT,’800’,1,’200’,1)) CNT_SIGN_NOTE --총인증건수
    , NVL(SUM(DECODE(A.MANA_PROC_STAT,’800’,A.SUMM_CHAR_AMOU,’200’,A.SUMM_CHAR_AMOU)),0) AMT_SIGN_NOTE --총인증금액
    , COUNT(DECODE(B.YN_ACC,’Y’,1)) CNT_ACC --미인증건수
    , NVL(SUM(DECODE(B.YN_ACC,’Y’,A.SUMM_CHAR_AMOU)),0) AMT_ACC --미인증금액
    , COUNT(CASE WHEN A.MANA_PROC_STAT IN (’100’,’550’,’900’) THEN 1 END) CNT_NOSIGN --회계처리건수
    , NVL(SUM(CASE WHEN A.MANA_PROC_STAT IN (’100’,’550’,’900’) THEN A.SUMM_CHAR_AMOU END),0) AMT_NOSIGN --회계처리금액
    ,  FROM TEX_MASTER A,
 TEX_PRE_MASTER B
 WHERE
 A.MANA_BILL_NUMB = B.MANA_BILL_NUMB(+)
 $WHERE$   <<--조건문 자바에서 처리
 GROUP BY C_CODE, DEPT_CODE
 ORDER BY DEPT_CODE

여기서 궁금증과 몇가지 추가사항에 대해서 문의를 드립니다.

원본코드에서는 1이 아니라 0으로 되어 있는데 여기서. 1을 한게. 제가 좀 이해가 되질 않았습니다.

 , NVL(A.CNT_TOTAL, 0), NVL(A.AMT_TOTAL, 0)
    , NVL(B.CNT_SIGN, 0),  NVL(B.AMT_SIGN, 0)
    , NVL(C.CNT_NOTE, 0), NVL(C.AMT_NOTE, 0)
    , NVL(B.CNT_SIGN, 0)+NVL(C.CNT_NOTE, 0)
    , NVL(B.AMT_SIGN, 0)+NVL(C.AMT_NOTE, 0)
    , NVL(D.CNT_ACC, 0), NVL(D.AMT_ACC, 0)
    , NVL(E.CNT_NOTSIGN, 0), NVL(E.AMT_NOTSIGN, 0)

원본코드 입니다.

고수님들의 도움을 요청합니다.

 

by 마농 [2008.06.19 09:42:02]
1. 원본코드는 0인데 개선코드는 1인 이유는?
=> 전혀 상관없는 것끼리 연관지어 질문하셨네요.
원본코드에선 nvl 에 0이 사용된것이구요, 개선 쿼리에서는 decode에 1이 사용된것이지요. 전혀 다른 내용이구요. 개선코드에서도 nvl에 0을 사용했습니다.
2. case 문
=> case문은 decode문의 확장형이라고 보시면 됩니다.(8i 부터 지원)
에러가 난다면 버전 차이이던가 아니면 적용을 잘못 하셨거나입니다.
3. 새로운 SELECT 를 또 카운트해야할경우에
=> count(decode(...)) 또는 count(case ...) 을 또 사용하시면 됩니다.

by 스물일곱 [2008.06.19 09:44:54]
감사합니다.^^
그러고보니 잘못연관지었네요..
막 못찾고 그랬는데...ㅎㅎ;;
언제 만날기회가 되시면. 제가 밥이라도 한끼 대접을.ㅋㅋㅋ
정말 감사합니다^^
댓글등록
SQL문을 포맷에 맞게(깔끔하게) 등록하려면 code() 버튼을 클릭하여 작성 하시면 됩니다.
로그인 사용자만 댓글을 작성 할 수 있습니다. 로그인, 회원가입