대출상환 관련 SQL을 작성 중 입니다.
고수님들께서 도와 주세요
거치기간을 반영한 원리금 균등상환을 하는 SQL 을 구현 해야 합니다.
(거치기간이 있는 경우와 없는 경우가 섞여 있음)
꼭 부탁드립니다.
예)
대출금:1,000,000원
이율: 3%
대출기간: 12개월간
거치기간 : 6개월
회차 | 상환원금 | 상환이자 | 입금합계 | 잔금 |
1 | 0 | 2,500 | 2,500 | 1,000,000 |
2 | 0 | 2,500 | 2,500 | 1,000,000 |
3 | 0 | 2,500 | 2,500 | 1,000,000 |
4 | 0 | 2,500 | 2,500 | 1,000,000 |
5 | 0 | 2,500 | 2,500 | 1,000,000 |
6 | 0 | 2,500 | 2,500 | 1,000,000 |
7 | 165,628 | 2,500 | 168,128 | 834,372 |
8 | 166,042 | 2,086 | 168,128 | 668,330 |
9 | 166,457 | 1,671 | 168,128 | 501,873 |
10 | 166,873 | 1,255 | 168,128 | 334,999 |
11 | 167,291 | 837 | 168,128 | 167,709 |
12 | 167,709 | 419 | 168,128 | 0 |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 | WITH t AS ( SELECT a, b, c, d, e , FLOOR(a*e*POWER(e+1, c-d) / (POWER(e+1, c-d) - 1)) f -- 원리금(균등상환액) FROM ( SELECT a, b, c, d , b/100/12 e -- 이율(월) FROM ( SELECT 1000000 a -- 대출금(원) , 3 b -- 이율(%/연) , 12 c -- 대출기간(월) , 6 d -- 거치기간(월) FROM dual) ) ) , t1 (a, b, c, d, e, f, g, h, i, j, k) AS ( SELECT a, b, c, d, e, f , 0 + 1 g -- 회차 , CASE WHEN d > 0 THEN 0 ELSE f - FLOOR(a * e) END h -- 상환원금 , FLOOR(a * e) i -- 상환이자 , CASE WHEN d > 0 THEN FLOOR(a * e) ELSE f END j -- 입금합계 , a - CASE WHEN d > 0 THEN 0 ELSE f - FLOOR(a * e) END k -- 잔금 FROM t UNION ALL SELECT a, b, c, d, e, f , g + 1 g -- 회차 , CASE WHEN c = g + 1 THEN k WHEN d > g THEN 0 ELSE f - FLOOR(k * e) END h -- 상환원금 , FLOOR(k * e) i -- 상환이자 , CASE WHEN d > g THEN FLOOR(k * e) ELSE f END j -- 입금합계 , k - CASE WHEN c = g + 1 THEN k WHEN d > g THEN 0 ELSE f - FLOOR(k * e) END k -- 잔금 FROM t1 WHERE g < c ) SELECT * FROM t1 ; |