1 つの金額を 2 つのフィールドに分割する必要があります。結果のフィールドの合計 = 最初の行を分割する比率はわかっていますが、結果の合計を丸めてから、次の行の比率を計算する必要があります (したがって、丸められた値の合計は正しくなります)。
このアルゴリズムを Oracle 10g PL/SQL でどのように記述できますか? 移行されたデータをテストする必要があります。これが私が思いついたものです(これまでのところ):
with temp as (
select 1 id, 200 amount, 642 total_a from dual union all
select 2, 200, 642 from dual union all
select 3, 200, 642 from dual union all
select 4, 200, 642 from dual union all
select 5, 200, 642 from dual
)
select
temp2.*,
remaining_a / remaining_amount ratio,
round(amount * remaining_a / remaining_amount, 0) rounded_a,
round(amount - amount * remaining_a / remaining_amount, 0) rounded_b
from (
select
temp.id,
temp.amount,
sum(amount) over (
order by id
range between current row and unbounded following
) remaining_amount,
case when id=1 then total_a /* else ??? */ end remaining_a
from temp
) temp2
更新: 上の画像が表示されない場合、期待されるrounded_A値は次
1 128
2 129
3 128
4 129
5 128