누적합계 구하는 법 알려주세요...T.T 0 4 5,063

by 정재연 누적합계 분석함수 over [2008.12.10 01:51:41]


datalist.GIF (15,986Bytes)
dataresult.GIF (16,743Bytes)

다음과 같이 각 발급별로 신규, 중단,해제 발급갯수를 구해는 것 까지 되었는 데..그 다음 신규누적을 구하는 것(newservice의 월별합계를 각 전월과 당월을 합쳐 나온 합계)을 어떻게 해야 할지 잘 모르겠습니다....게시판에서 찾아보아도 시원스럽운 대답이 많이 없더라구요...T.T

  DB 고수님들 꼭 가르쳐 주세요...T.T

 (파란색으로 둘러진 신규누적합계만 뽑아내면 됩니다..)

by 마농 [2008.12.10 08:42:09]
SELECT MAX(SUBSTR(a.regdate,1,8)) AS regdate
, MAX(c.productname) AS productname
, NVL(SUM(DECODE(a.oldstate||a.newstate,'NN',1)),0) AS newservice
, NVL(SUM(DECODE(a.newstate,'O',1)),0) AS stopservice
, NVL(SUM(DECODE(a.newstate,'C',1)),0) AS closeservice
, SUM(NVL(SUM(DECODE(a.oldstate||a.newstate,'NN',1)),0)) OVER(ORDER BY SUBSTR(a.regdate,1,6)) AS newservice_tot
FROM statechangelog a
, card b
, cardproduct c
WHERE a.id = b.id
AND b.cardproductno = c.cardproductno
GROUP BY SUBSTR(a.regdate,1,6)
;

by 아스키 [2008.12.10 16:23:57]
마농님 감사드려요~~~^^
역시 OVER로 해야겠군요...^^
그런데 저기 신규누적합계에서 productname이 월별로 다른 두개가 있고 9월과 10월은 같은 product인데 11월만 다른 product인 경우에 누적합계가 1인 겨우일때( 신규누적합계가 2,9,10이 아닌 2,9,1일 때..) 어떻게 over()함수를 써야 하나요? (c.productname에 c.productcode가 따로 있거든요...한번만 더 가르쳐주세요...T.T)

by 마농 [2008.12.10 16:30:41]
SUM(...) OVER(PARTITION BY MAX(c.productname) ORDER BY SUBSTR(a.regdate,1,6))

by 아스키 [2008.12.10 18:27:24]
아..마농님..감사드려요~~~^^
sum,over()가 이렇게 다양한 기능을 해 낼 수 있다니...!!!
한수 잘 배웠습니다. 마농님...^^
댓글등록
SQL문을 포맷에 맞게(깔끔하게) 등록하려면 code() 버튼을 클릭하여 작성 하시면 됩니다.
로그인 사용자만 댓글을 작성 할 수 있습니다. 로그인, 회원가입