거래처 원장을 SQL로 작성하고 있습니다. 특정기간을 지정하면
월별로 나뉘면서 월별로 월계를 구하며
그것을 누계로 누적 시키고 싶습니다.
아래표가 제가 원하는 출력결과 입니다. 아래와 같이 월별로 월계, 누계를 적용시킬수 있을까요 ..?
날짜 | 구분 | 가격 | 입급액 | 잔액 |
07월 16일 | 구매 | 200000 | 0 | 200000 |
07월 17일 | 입금 | 0 | 50000 | 150000 |
07월 24일 | 구매 | 100000 | 0 | 250000 |
월계 | 300000 | 50000 | ||
누계 | 300000 | 50000 | ||
08월 16일 | 구매 | 100000 | 0 | 350000 |
08월 17일 | 구매 | 50000 | 0 | 400000 |
08월 24일 | 입금 | 300000 | 100000 | |
월계 | 150000 | 300000 | ||
누계 | 450000 | 350000 |
WITH t AS ( SELECT '20160716' dt, '구매' gb, 200000 price, 0 amount UNION ALL SELECT '20160717', '입금', 0, 50000 UNION ALL SELECT '20160724', '구매', 100000, 0 UNION ALL SELECT '20160816', '구매', 100000, 0 UNION ALL SELECT '20160817', '구매', 50000, 0 UNION ALL SELECT '20160824', '입금', 0, 300000 ) SELECT COALESCE(dt, x, '누계') dt , gb , CASE GROUPING(x) WHEN 0 THEN SUM(price) ELSE SUM(SUM(price)) OVER(PARTITION BY GROUPING(x) ORDER BY ym) END price , CASE GROUPING(x) WHEN 0 THEN SUM(amount) ELSE SUM(SUM(amount)) OVER(PARTITION BY GROUPING(x) ORDER BY ym) END amount , CASE GROUPING(dt) WHEN 0 THEN SUM(balance) END balance FROM (SELECT SUBSTRING(dt, 1, 6) ym , '월계' x , dt , gb , price , amount , SUM(price - amount) OVER(ORDER BY dt, gb) balance FROM t WHERE dt BETWEEN '20160701' AND '20160831' ) a GROUP BY ym, ROLLUP(x, (dt, gb)) ORDER BY a.ym, GROUPING(a.x), GROUPING(a.dt), a.dt, a.gb ;