정치자금 기부금 공제 쿼리 문의드립니다.(오라클 9i) 0 4 873

by 나도해 [SQL Query] [2014.02.06 16:49:59]


3.JPG (34,616Bytes)


연말정산 정치자금기부금에서 기부한 금액 중 10만원 초과한 금액만 소득공제하는 쿼리를 만들고 있습니다.

정치자금기부를 1건만 한 경우에는 문제가 되지 않는데 2건 이상 기부 했을 경우

기부건별로 공제대상금액을 산출하려고 합니다.


예시
by 김치찌게 [2014.02.06 17:32:09]
with T as
(
select 1 as seq, 70000 as mon from dual union all
select 2, 40000 from dual union all
select 3, 110000 from dual union all
select 4, 100000 from dual
)
select seq, mon, case when deasang <= 0 then 0 else least(deasang,mon) end deasang1
from (
--select seq, mon, sum(mon) over (order by seq rows between unbounded preceding and current row)-100000 as deasang
select a.seq, a.mon, (select sum(mon) from T b where b.seq <= a.seq)-100000 as deasang
from T a
)
/

??

by 나도해 [2014.02.06 17:35:51]

답변 감사드립니다.^^

누적 구하고 이상하게 쿼리가 길어져서 복잡해졌는데

잘 활용해 보겠습니다.

by 마농 [2014.02.06 17:38:24]
WITH t AS
(
SELECT '001' empno, 1 seq,  70000 amt FROM dual
UNION ALL SELECT '001', 2,  40000 FROM dual
UNION ALL SELECT '002', 1, 100000 FROM dual
UNION ALL SELECT '002', 2, 110000 FROM dual
UNION ALL SELECT '002', 3, 100000 FROM dual
UNION ALL SELECT '003', 1,  40000 FROM dual
UNION ALL SELECT '003', 2,  50000 FROM dual
UNION ALL SELECT '003', 3,  60000 FROM dual
)
SELECT empno, seq, amt
     , amt - LEAST(GREATEST(100000 - s_amt, 0), amt) 소득공제금액
     , ROUND(LEAST(GREATEST(100000 - s_amt, 0), amt) / 1.1) 세액공제금액
  FROM (SELECT empno, seq, amt
             , SUM(amt) OVER(PARTITION BY empno ORDER BY seq) - amt s_amt
          FROM t
        )
;

by 나도해 [2014.02.06 17:44:30]

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