如何更新最终AMOUNT在所有行中最初为NULL

时间:2016-03-13 15:40:28

标签: oracle

**seq**   **amt1**          **amt2**     **int_amt**  **final_amt**
   1        500               NuLL          2000         2500
   2        Null              NULL          NULL         2500   
   3        NULL              NULL          NULL         2500
   4        200               NULL          NULL         2700

通过对第一行应用final_amt = int_amt + amt1-amt2来更新final_amt 然后对于所有行,如果amt1和amt2的行为NULL,则final_amt = final_amt + amt1-amt2,则final_amt应包含last_amt的前一个值IN ORACLE;

1 个答案:

答案 0 :(得分:0)

一种方法是相关子查询。考虑到第一行之后int_amtNULL,这似乎可以满足您的需求:

update t
    set final_amt = (select coalesce(sum(amt1), 0) - coalesce(sum(amt2), 0) + coalesce(sum(int_amt), 0)
                         from t t2
                         where t2.seq <= t.seq
                        );

如果您想在第一行后忽略int_amt,请使用case

update t
    set final_amt = (select (coalesce(sum(amt1), 0) - coalesce(sum(amt2), 0) +
                             (case when seq > 1 then 0 else coalesce(sum(int_amt), 0) end)
                            )
                         from t t2
                         where t2.seq <= t.seq
                        );