MSSQL 쿼리질문 드립니다. 0 2 2,636

by 긍률 [SQLServer] MSSQL [2017.03.07 15:20:40]


거래처 원장을 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  
by 마농 [2017.03.07 16:56:08]
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
;

 


by 긍률 [2017.03.08 11:29:21]

감사합니다. ㅎㅎㅎ

댓글등록
SQL문을 포맷에 맞게(깔끔하게) 등록하려면 code() 버튼을 클릭하여 작성 하시면 됩니다.
로그인 사용자만 댓글을 작성 할 수 있습니다. 로그인, 회원가입