누진세율 질문입니다.
아래와 같은 세율구간이 있습니다.
# TABLE A : 구간별 세율이 들어 있습니다.
-----------------------------------------------------
시작값 | 종료값 | 세율
-----------------------------------------------------
1 | 100,000 | 1 %
100,000 | 1,000,000 | 5 %
1,000,000 | 5,000,000 | 10 %
-----------------------------------------------------
# 사용값이 2,000,000 일 경우 아래와 예시와 같이 각 구간에 속해 있는 금액을 계산하고 싶습니다.
1. 100,000 * 1 % = 1,000
2. 900,000 * 5 % = 45,000
3. 1,000,000 * 10 % = 100,000
합계 : 146,000
많은 부탁 드립니다.
-- 각 구간 시작, 끝이 애매하여 1부터 시작하는 것으로 가정 WITH t AS ( SELECT 1 s, 100000 e, 1 r FROM DUAL UNION ALL SELECT 100001 s, 1000000 e, 5 r FROM DUAL UNION ALL SELECT 1000001 s, 5000000 e, 10 r FROM DUAL ) SELECT SUM(DECODE(SIGN(e - :u), 1, DECODE(SIGN(:u - s), -1, 0, (:u - s + 1) * r / 100), (e - s + 1) * r / 100)) sum FROM t --WHERE s <= :u
WITH tax AS ( -- 저는 시작값 1을 0으로 바꿨습니다. SELECT 0 s, 100000 e, 1 r FROM dual UNION ALL SELECT 100000, 1000000, 5 FROM dual UNION ALL SELECT 1000000, 5000000, 10 FROM dual ) , amt AS ( SELECT 1 pk, 2000000 amt FROM dual UNION ALL SELECT 2, 200000 FROM dual UNION ALL SELECT 3, 20000 FROM dual ) SELECT a.pk , a.amt , SUM((LEAST(a.amt, t.e) - t.s) * t.r) / 100 FROM amt a , tax t WHERE a.amt > t.s GROUP BY a.pk, a.amt ORDER BY a.pk ;