오라클 GROUP BY ROLLUP 합계가 틀린부분 문의드립니다. 0 2 1,426

by 이준엽 [SQL Query] GROUP BY ROLLUP [2018.08.14 12:35:36]


안녕하세요.

IT부서에서 근무하는 직원입니다.

시스템에서 월별 건수를 보여주는 화면이 있어 개발중입니다.

GROUP BY ROLLUP 기능을 사용하여 합계를 나타내려고하는대 건수가 안맞내요...

아래의 쿼리보시고 어떤 부분이 잘못되었는지 알려주시면 감사하겠습니다.

 

####쿼리####

SELECT '02' AS AMT_BASE
     , '1' AS GUBUN
     , SUBSTR(ACPT_DT, 1, 6) AS ACPT_DT
     , (COUNT( DISTINCT DECODE(MBR_NUM, '001', DECODE(BOND_SEP, '11', RNUM, 0), 0) ) -1 ||'/'|| SUM( DECODE(MBR_NUM, '001', DECODE(BOND_SEP, '11', 1, 0), 0) ) ) AS MBR001_11_LEND_BLC       
  FROM BONDM01M
 WHERE 1=1
   AND BOND_ACC_STA IN ('00', '01')
   AND ACPT_DT IS NOT NULL
   AND DECODE('02', '01', ACPT_DT, SUBSTR(ACPT_DT, 1, 6)) BETWEEN '201409' AND '201410'
 GROUP BY ROLLUP(SUBSTR(ACPT_DT, 1, 6))

###결과값###

| AMT_BASE | GUBUN | ACPT_DT | MBR001_11_LEND_BLC

|02             |1          |201409    |595/612

|02             |1          |201409    |640/656

|02             |1          |null         |1227/1268

 

 

 

 

by 야신 [2018.08.15 08:47:01]

count & decode 사용하면서 else 일경우 0 처리를 해서 그런거 같네요.

 


by 마농 [2018.08.17 08:24:05]

중복제거 카운트네요.
합계가 각각의 중복 제거된 결과를 더하는게 아니죠.
합계는 전체 중복 제거해서 카운트 합니다.
9월에도 있고 10월에도 있는 건 전체 건수에서는 2건이 아닌 1건으로 계산되죠.
595 + 640 = 1235 인데 1227 이 나온 것은 정상적인 결과입니다.
DECODE 에서 조건에 맞지 않는 것을 0 으로 처리한 것도 왜 그렇게 했는지 의문입니다.
0도 1건으로 카운트 됩니다.

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