group by 와 roll up 결과값 중복 질문입니다. 0 4 2,562

by 일찡 [SQL Query] 오라클 orcle sql groupby rollup [2019.10.24 17:14:19]


값이 중복이 떠서 문의드립니다
테이블값과 결과값 첨부해보았습니다.

SELECT
       CASE
         when GROUPING(CUST_CD)=0
   AND GROUPING(OUT_DT)=1 THEN '소계'
        WHEN GROUPING(CUST_CD)=1 AND GROUPING(OUT_DT)=1 THEN '총계'
         ELSE CUST_CD
       END CUST_CD,
       DECODE(GROUPING(OUT_DT), 1, '', max(PRS_DT)) PRS_DT ,
       DECODE(GROUPING(OUT_DT), 1, '', OUT_DT) OUT_DT,
       CASE
         WHEN GROUPING(OUT_DT)=1
   AND GROUPING(CUST_CD)=0 THEN MAX(CUST_NM)
         WHEN GROUPING(OUT_DT)=1 THEN ''
         ELSE MAX(CUST_NM)
       END CUST_NM,
       DECODE(GROUPING(OUT_DT), 1, '', MAX(ITEM_CD)) ITEM_CD,
       DECODE(GROUPING(OUT_DT), 1, '', MAX(ITEM_NM)) ITEM_NM,
       DECODE(GROUPING(OUT_DT), 1, '', MAX(COMP_CD)) COMP_CD,
       SUM(OUT_QTY) OUT_QTY,
       SUM(TOT_COMPR) TOT_COMPR,
       SUM(TOT_COMPF) TOT_COMPF
 FROM TABLEXX
 GROUP BY ROLLUP(CUST_CD, OUT_DT, ITEM_CD) ;

 

테이블값

CUST_CD PRS_DT OUT_DT CUST_NM ITEM_CD ITEM_NM OUT_QTY TOT_COMPF TOT_COMPR COMP_CD
1000104 20190802 20190802 공명 601727 해바라기 1 0 100 제품
1000104 20190801 20190801 공명 601727 해바라기 1 0 100 제품

결과값

CUST_CD PRS_DT OUT_DT CUST_NM ITEM_CD ITEM_NM COMP_CD OUT_QTY TOT_COMPR TOT_COMPF
1000104 20190801 20190801 공명 601727 해바라기 제품 1 100 0
1000104 20190801 20190801 공명 601727 해바라기 제품 1 100 0
1000104 20190802 20190802 공명 601727 해바라기 제품 1 100 0
1000104 20190802 20190802 공명 601727 해바라기 제품 1 100 0
소계     공명       2 200 0
총계             2 200 0

중복이 뜨는 이유를 잘모르겟어서 문의드립니다.

GROUP BY 는 CUST_CD,OUT_DT,ITEM_CD 이렇게 하고싶고

소계는 거래처마다 하나씩뜨게 하고싶습니다.

by jkson [2019.10.24 17:35:26]

 GROUP BY ROLLUP(CUST_CD, (OUT_DT, ITEM_CD)) ;


by 일찡 [2019.10.24 17:56:37]

초보자인 저를 이끌어주신 당신은 저의 빛입니다.

감사합니다


by 마농 [2019.10.24 17:58:26]

데이터가 중복되었다기 보다는 단계별 소계가 출력되었기 때문이라고 보시면 됩니다.
DECODE 나 CASE 문이 좀 문제가 있어서 중복된 것처럼 보일 수 있으니
DECODE 나 CASE 문 다 빼고 순수 GROUP BY 컬럼만으로 조회 결과 확인해 보세요.
그리고 최종 원하는 결과를 표현해 주세요.


by 일찡 [2019.10.24 18:14:27]

아! 자세한 설명 감사합니다 다음부터는 조심해서 코딩하겠습니다!

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