aTable
seq | accdate | Dr | Cr |
1 | 2013-12-01 | 10,000 | 0 |
2 | 2013-12-10 | 20,000 | 0 |
3 | 2013-12-20 | 30,000 | 0 |
4 | 2013-12-26 | 50,000 | 0 |
bTable
seq | accdate | Dr | Cr |
1 | 2013-12-05 | 0 | 10,000 |
2 | 2013-12-15 | 0 | 20,000 |
두개의 테이블을 Union으로 합쳐서 임시 테이블에 저장한 상태입니다.
seq | accdate | Dr | Cr |
1 | 2013-12-01 | 10,000 | 0 |
1 | 2013-12-05 | 0 | 10,000 |
2 | 2013-12-10 | 20,000 | 0 |
2 | 2013-12-15 | 0 | 20,000 |
3 | 2013-12-20 | 30,000 | 0 |
4 | 2013-12-26 | 50,000 | 0 |
여기서 Dr과 Cr의 일자별 누적 합계를 구하고 싶습니다.
결과는 아래와 같이요..
seq | accdate | Dr | Cr | TOTAL |
1 | 2013-12-01 | 10,000 | 0 | 10,000 |
1 | 2013-12-05 | 0 | 10,000 | 0 |
2 | 2013-12-10 | 20,000 | 0 | 20,000 |
2 | 2013-12-15 | 0 | 20,000 | 0 |
3 | 2013-12-20 | 30,000 | 0 | 30,000 |
4 | 2013-12-26 | 50,000 | 0 | 80,000 |
Comment 1
-
향지
2013.12.26 14:14
재귀 쿼리로 풀어봤습니다.
합쳐서 일자별로 번호하나 매기고
1번부터 시작해서
2번은 1번과 합하고
다시 3번은 계산된 2번과 합하고
....(반복)
;with aTable AS
(
SELECT 1 AS seq, CONVERT(DATETIME, '2013-12-01') AS accdate, 10000 AS Dr, 0 AS Cr
UNION ALL
SELECT 2, '2013-12-10', 20000, 0
UNION ALL
SELECT 3, '2013-12-20', 30000, 0
UNION ALL
SELECT 4, '2013-12-26', 50000, 0
), bTable AS
(
SELECT 1 AS seq, CONVERT(DATETIME, '2013-12-05') AS accdate, 0 AS Dr, 10000 AS Cr
UNION ALL
SELECT 2, '2013-12-15', 0, 20000
), UniTable AS
(
SELECT ROW_NUMBER() OVER (ORDER BY accdate) AS NUM, *
FROM
(
SELECT * FROM aTable
UNION ALL
SELECT * FROM bTable
) AS A
), SumTable AS
(
SELECT Num, Accdate, Dr, Cr, Dr-Cr as total
FROM UniTable
WHERE NUM=1
UNION ALL
SELECT B.Num, B.Accdate, B.Dr, B.Cr, A.total + (B.Dr-B.Cr) as total
FROM SumTable AS A
JOIN UniTable AS B
ON A.NUM+1=B.NUM
)
SELECT * FROM SumTable
ORDER BY NUM