할인 쿼리 질문입니다.
with t as
(
select 1 sort, 20000 price, 'AMT' gubun, 2000 amt, NULL rate from dual union all
select 2 sort, 20000 price, 'RATE' gubun, NULL amt, 10 rate from dual union all
select 3 sort, 20000 price, 'AMT' gubun, 3000 amt, NULL rate from dual union all
select 4 sort, 20000 price, 'RATE' gubun, NULL amt, 20 rate from dual
)
select t.*,
row_number() over (order by sort) rnum,
decode(gubun,'RATE',price * rate * 0.01,amt) dc_amt,
price - sum(decode(gubun,'RATE',price * rate * 0.01,amt)) over (order by sort) remain_amt
from t;
를 실행하면 아래와 같은 결과를 얻을 수 있습니다.
SORT PRICE GUBUN AMT RATE RNUM DC_AMT REMAIN_AMT
----- ------ ----- ----- ---- ---- ------ ----------
1 20000 AMT 2000 1 2000 18000
2 20000 RATE 10 2 2000 16000
3 20000 AMT 3000 3 3000 13000
4 20000 RATE 20 4 4000 9000
그러나 원하는 결과물을 아래와 같습니다.
SORT PRICE GUBUN AMT RATE RNUM DC_AMT REMAIN_AMT
----- ------ ----- ----- ---- ---- ------ ----------
1 20000 AMT 2000 1 2000 18000
2 20000 RATE 10 2 1800 16200
3 20000 AMT 3000 3 3000 13200
4 20000 RATE 20 4 2640 10560
즉 SORT 기준으로 바로 상위의 계산된 REMAIN_AMT 에 rate 를 곱하여 DC_AMT를 구하고 싶습니다.
될듯 될듯 안되서 몇일을 고민하다 올립니다.(MODEL 배제)
|