순차적으로 빼기 MSSQL 2012 0 2 2,224

by ahriow [SQL Query] [2019.08.16 17:17:08]


payno prd amt totpaid  paid left
a 1 1000 1500 1000 0
a 2 2000 1500 500 500
a 3 7000 1500 0 7000
b 42 5000 10000 5000 0
b 68 3000 10000 3000 0

payno= 수금번호

prd = 상품아이디

amt = 상품금액

totpaid = 수금금액 (예시에선 a 수금에 대해선 9000원 b 수금에 대해선 10000 을 받은 상태입니다. b 수금에서처럼 상품금액을 초과하는 수금 가능)

까지 알고 있는 상황에서

paid(수금된금액) 와 left(잔액) 를 계산해서 뿌려주려고 합니다.

수금 금액은 상품번호 순으로 채워넣는 로직입니다.

쿼리 도움 부탁드립니다 MSSQL 사용중입니다. 

 

by 마농 [2019.08.19 07:58:02]
WITH t AS
(
SELECT 'a' payno, 1 prd, 1000 amt, 1500 totpaid
UNION ALL SELECT 'a',  2, 2000,  1500
UNION ALL SELECT 'a',  3, 7000,  1500
UNION ALL SELECT 'b', 42, 5000, 10000
UNION ALL SELECT 'b', 68, 3000, 10000
)
SELECT payno, prd, amt, totpaid
     , CASE WHEN totpaid > s       THEN amt
            WHEN totpaid < s - amt THEN 0
            ELSE totpaid - s + amt
        END paid
     , CASE WHEN totpaid > s       THEN 0
            WHEN totpaid < s - amt THEN amt
            ELSE s - totpaid
        END left_amt
     , CASE WHEN totpaid > s       THEN totpaid - s
            ELSE 0
        END left_paid
  FROM (SELECT payno, prd, amt, totpaid
             , SUM(amt) OVER(PARTITION BY payno ORDER BY prd) s
          FROM t
        ) a
;

 


by ahriow [2019.08.19 09:13:45]

언제나 감사합니다!!

order 를 넣으면 순차적으로 더해지는군요 부족한 지식을 또 채우고 갑니다. 감사합니다!!

항상 건강하시고 행복하세요!!^^

 

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