上游给了一个明细表和一个总金额,明细表字段为(产品号,公司号,金额),要求对明细金额按照产品号和公司号进行分组求和,也就是同一个产品号下各个公司的总金额,上游给的明细数据金额字段为小数点后8位精度,所有金额加起来刚好是一个整数(总金额),但是我们的程序为将查询出来的数据直接插入另外一张表b,这个表b的金额字段为2位精度,这样通过四舍五入插入到表b后就会产生尾差,也就是表b中的金额总和不等于总金额,请问各位大佬如何解决,我的想法是对查询出来的结果现四舍五入然后与明细表中同一个产品号的总金额进行二次判断,如果同一个产品号下金额一致则不做处理,如果相差1分或2分钱,就直接在查询结果上加上或减去这个尾差,但是现在不知道如何对查询出来的结果进行二次处理,各位大佬麻烦指导一下

解决方案 »

  1.   

    --A 明细表-产品公司维度  B汇总表-产品维度
    merge into A
    USING (select rowid AS RD,
                  A.product,
                  A.company,
                  A.balance,
                  row_number() over(partition by A.product order by A.balance desc) as rn,--按金额排序,产品维度分组,取最大的金额对应的列
                  (sum(A.balance) over(partition by A.product) - b.tot_balance) as minus_balance  --金额差额
             from A, B
            where A.product = B.product) T
    ON (a.product = t.product and t.rn = 1 and a.rowid = t.rd and t.company = a.company)
    when matched then
      update set a.balance = a.balance - t.minus_balance  --兜底