누적적 차감 금액 방법 질문입니다. 0 4 6,413

by 김주환 [SQL Query] 누적 차감 [2013.08.12 16:22:54]


TYPE 품목코드 금액 어음금액 외매잔액
기초 -2767
정상판매 09111001 18000 15233
정상판매 09601014 28800 44033
정상판매 23202001 34000 78033
정상판매 02106001 26600 104633
정상판매 02109001 26600 131233
정상판매 07503002 112200 243433
어음입금 50000 193433



위와 같이 외매잔액 = 외매잔액 + 금액 - 어음금액으로 계속 누적적으로 외매잔액을 차감되게 쿼리를 작성할 수 있나요?
by 아린 [2013.08.12 16:47:56]
정렬순서가 필요한데요,
보통 날짜 또는 seq 가 있을듯 합니다.

WITH t(SEQ, TYPE, 품목코드, 금액, 어음금액, 외매잔액) AS(
SELECT 1, '기초',          NULL,      0,     0,  -2767 FROM dual UNION ALL
SELECT 2, '정상판매', '09111001',  18000,     0,      0 FROM dual UNION ALL
SELECT 3, '정상판매', '09601014',  28800,     0,      0 FROM dual UNION ALL
SELECT 4, '정상판매', '23202001',  34000,     0,      0 FROM dual UNION ALL
SELECT 5, '정상판매', '02106001',  26600,     0,      0 FROM dual UNION ALL
SELECT 6, '정상판매', '02109001',  26600,     0,      0 FROM dual UNION ALL
SELECT 7, '정상판매', '07503002', 112200,     0,      0 FROM dual UNION ALL
SELECT 8, '어음입금',       NULL,      0, 50000,      0 FROM dual
)
SELECT seq, type, 품목코드, 금액, 어음금액
     , SUM(외매잔액+금액-어음금액) OVER(ORDER  BY seq) 외매잔액
  FROM t
          

by 김주환 [2013.08.12 16:56:54]
같은 날짜면은 이상하게 금액이 계산됩니다.ㅠ

아아 그냥 다른 조건을 ORDER BY 더 추가 하면 되네요 .감사합니다.^^

by 마농 [2013.08.12 17:18:03]
SUM(금액) OVER(ORDER BY 날짜) 하면
같은 날짜가 반복될 때 같은 날짜 자료는 한꺼번에 합산됩니다.
날짜 단위가 아닌 Row 단위로 합산되게 하려면...
1. 정렬키를 유니크하게 한다.
  - pk 또는 순번등의 유니크한 항목을 정렬기준에 추가
  - 별도 유니크 키가 없다면 rowid, rownum 등을 활용
2. row 단위 계산되도록 Windowing 절 추가
  - SUM(금액) OVER(ORDER BY 날짜) 은 다음 구문의 생략된 형태이다.
  - SUM(금액) OVER(ORDER BY 날짜 RANGE BETWEEN UNBOUNDED PRECEDING AND CURRENT ROW)
  - 고로 RANGE 부분을 ROWS 로 바꿔주면 됩니다.
  - SUM(금액) OVER(ORDER BY 날짜 ROWS BETWEEN UNBOUNDED PRECEDING AND CURRENT ROW)
  - 하지만 명확한 정렬기준을 가지고 1번 방법을 선택 하는것이 좋습니다.

by 될때까지 [2013.08.13 11:02:43]

rownum에 대해 공부하다 쉬던 중이었는데 우연히 보게 된 마농님 댓글에서 또 하나 배워가네요 항상 감사드립니다
댓글등록
SQL문을 포맷에 맞게(깔끔하게) 등록하려면 code() 버튼을 클릭하여 작성 하시면 됩니다.
로그인 사용자만 댓글을 작성 할 수 있습니다. 로그인, 회원가입