거래처 원장을 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
;