본문 바로가기
프로그래밍/DBMS

MSSQL 누적합 구하기

by zoo10 2014. 7. 15.
매장별 월 누적 합계가 필요해서 찾아봤더니 아래 같이 셀프조인으로 처리하는 방식이 있어 기재한다.

마트 구성이나 집계 화면 개발 시 자주 사용하니 기억할 것.

CTE 쿼리 때문에 mssql 2005 버전이상 부터 사용가능하다.
하위 버젼은 임시테이블 또는 커서를 이용해서 해야 하니 다른 자료를 참조해야 한다.


WITH ADDSUM AS
(
select
a.prodkey --상품코드
,prodDt --yyyy-mm-dd
,sum(a.TotalAmt) sumAmt --판매금액
,ROW_NUMBER() OVER(PARTITION BY A.prodkey ORDER BY A.prodkey, pordDt) RO
from salesmt a --판매테이블
where 1=1
and a.createdate between '2011-05-01 00:00:00.000' and '2014-05-31 11:59:59.999'
group by a.prodkey, prodDt
--order by 1, 2
)
SELECT 
A.prodkey
,A.prodDt
,MAX(a.sumAmt)
,SUM(B.sumAmt) addAmt -- 누적합(a의 합이 아니라 b의 합이다.)
FROM ADDSUM A
LEFT OUTER JOIN ADDSUM B
ON A.prodkey= B.prodkey 
AND A.RO >= B.RO
GROUP BY A.prodkey, A.prodDT
ORDER BY 1, 2

WITH문 안의 쿼리는 재량껏...