首先要知道首月的期初余额 或 末月的期末余额。(下面的是ORACLE的语法)
1. 知道首月期初余额:期初余额 + 累计净流量
update userid.jkcw_zz set 
  userid.jkcw_zz.QMYE = 
    (select 期初余额 + sum(userid.jkcw_zz.JFJE-userid.jkcw_zz.DFYE)
     from userid.jkcw_zz a
     where a.kjnf <= userid.jkcw_zz.kjnf 
     and a.kjyf <= userid.jkcw_zz.kjyf)
2. 知道末月期末余额: 期末余额 - 累计净流量
update userid.jkcw_zz set 
  userid.jkcw_zz.QMYE = 
    (select 期末余额 - nvl(sum(userid.jkcw_zz.JFJE), 0) +
             nvl(sum(userid.jkcw_zz.DFYE), 0)
     from userid.jkcw_zz a
     where a.kjnf >= userid.jkcw_zz.kjnf 
     and a.kjyf >= userid.jkcw_zz.kjyf)

解决方案 »

  1.   

    什么数据库,报什么错误?
    我认为你这个sql执行后QMYE应该还是空值。
    改成这样试试:
    update userid.jkcw_zz a set   
       a.QMYE=(select b.QMYE from userid.jkcw_zz b where b.KJYF=a.KJYF-1)
       +a.JFJE-a.DFJE where a.KJYF>1 
    如果数据跨年度的话,还要把年度条件加进来。
      

  2.   

    是db2的数据库,没有错误.就是一条语句也不执行.不过我现在人不在公司里面,楼上chengxb大山的应该可行.明天我再试试.如果可以明天就给分:)谢谢各位兄弟关心!
      

  3.   

    你们的语句不能得出正确结果,下面语句已测试("期初余额"请用实际
    值替换):
    update userid.jkcw_zz a set 
      a.QMYE = (select 期初余额 + (value(sum(b.JFJE),0)-
                value(sum(b.DFYE),0))
         from userid.jkcw_zz b
         where b.kjnf <= a.kjnf 
         and b.kjyf <= a.kjyf)
    如一月份有正确的QMYE,则“期初余额”可用select 获取,并且附加条件
    where kjyf > 1
    以不更新一月份数据。