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 사용중입니다.
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 ;