[sql]sql select 조회시 sum한 값을 다시 sum 할수 없나요?? :: 오라클팁[SSISO Community]
 
SSISO 카페 SSISO Source SSISO 구직 SSISO 쇼핑몰 SSISO 맛집
추천검색어 : JUnit   Log4j   ajax   spring   struts   struts-config.xml   Synchronized   책정보   Ajax 마스터하기   우측부분

오라클팁
[1]
등록일:2008-03-25 18:19:29 (0%)
작성자:
제목: [sql]sql select 조회시 sum한 값을 다시 sum 할수 없나요??

SELECT  DECODE(B.INOU_CD,'',A.COM_NUM,B.INOU_CD)INOU_CD, 
 A.COM_NUM,A.COM_CDNM,  DECODE(SUM(B.INOU_AMOU),'',0,SUM(B.INOU_AMOU)) AS SM
 FROM  ACC_COMMON A 
 LEFT OUTER JOIN ACC_PRO_SPEND_DETAIL B ON B.INOU_CD = A.COM_NUM AND B.INOU_CLCD = A.COM_CLCD       
 WHERE A.COM_CLCD = 'C1'  
 GROUP BY B.INOU_CD, A.COM_NUM, A.COM_CDNM 
 ORDER BY A.COM_NUM ASC

 

위와 같은 쿼리에서 SM에 해당 하는 값을 다시 sum 해서 합계를 내려구 하는데

좀 도와주세요

-----------------------------------------------------------------------------



설마 DECODE내에 SUM을 구현한 분이 SUM할줄 몰라서 질문을 올렸으리라 생각하기 힘듭니다.

 

질문이 원하는 내용과 약간 다른 것 같습니다.

원하는게 단순한 sum방법이 아니고 현재 쿼리에서 group by별 합계가 나오고있는데 거기에 총합계까지 one-sql로 나오는 쿼리를 원한다고 가정하여 작성해 드리겠습니다.

 

이런 경우라면 Key-Point는 group by 시 ROLLUP 또는 CUBE 처리입니다.

 

그리고 DECODE(SUM(B.INOU_AMOU),'',0,SUM(B.INOU_AMOU)) 는 decode보다는

NVL(SUM(B.INOU_AMOU), 0)으로 단순화 할 수 있으니 참고하시구요...;

 

SELECT  DECODE(B.INOU_CD,'',A.COM_NUM,B.INOU_CD)INOU_CD, 
 A.COM_NUM,A.COM_CDNM,  NVL(SUM(B.INOU_AMOU), 0) AS SM
 FROM  ACC_COMMON A 
 LEFT OUTER JOIN ACC_PRO_SPEND_DETAIL B ON B.INOU_CD = A.COM_NUM AND B.INOU_CLCD = A.COM_CLCD       
 WHERE A.COM_CLCD = 'C1'  
 GROUP BY ROLLUP(B.INOU_CD, A.COM_NUM, A.COM_CDNM )
HAVING GROUPING(A.COM_CDNM) = 0 --> 원래 group by된 raw-data들 조건

          OR GROUPING(B.INOU_CD) = 1  --> ROLLUP에 의해 생성된 총합계 row의 조건

ORDER BY A.COM_NUM ASC

 

HAVING절은 님이 총합계만 원한다는 가정에 맞춘것이니 쓰지말고 테스트 해 보세요.

각 group by 컬럼별 소계와 총합계가 나타날 겁니다.

 

이 의미가 아니라면 원하는 결과를 정확히 표현하시어 추가질문 하시기 바랍니다.

input이 애매하면 output은 절대 원하는대로 정확히 안나오는 거 아시죠?

 

건승하시길...수고하세요~~

[본문링크] [sql]sql select 조회시 sum한 값을 다시 sum 할수 없나요??
[1]
코멘트(이글의 트랙백 주소:/cafe/tb_receive.php?no=3008
작성자
비밀번호

 

SSISOCommunity

[이전]

Copyright byCopyright ⓒ2005, SSISO Community All Rights Reserved.