select 编号,
       日期,
       贷方金额,
       借方金额,
       余额= (  select sum(isnull(贷方金额,0))-sum(isnull(借方金额,0)) 
                from tablename 
                where 编号<=a.编号
              )
from tablename a
order by 编号

解决方案 »

  1.   

    可不可以使用存储过程?个人以为使用一个循环while即可,这个过程可入在查询时候做或放在数据维护(增删改)时触发器做
    首先为数据添加一个标识字段,既然修改表结构不行,那就用余额这个字段吧,这总可以吧Update 余额 = Null --用作标识位
    Update 余额 = Isnull(贷方金额 - 借方金额,0) where 编号日期是最小的一个
    while Exists(select IsCom from TableA where 余额 is null)
     Update 余额 = Isnull(b.上一条记录余额+a.本条记录贷方金额-a.本条记录借方金额,0)
     from TableA a, (select 编号,max(日期) from TableA where 余额 is not null group by 编号) b
                   (select 编号,min(日期) from TableA where 余额 is null group by 编号) c,
                   (select * from TableA) d
     where b.编号=d.编号 and b.日期=d.日期 and a.编号=c.编号 and a.日期=c.日期
       and a.编号 = d.编号最后: select * from TableA order by 编号,日期即可或者你在前台也可以
      

  2.   

    select a.编号,a.日期,a.贷方金额,a.借方金额,
    sum(isnull(b.贷方金额,0))-sum(isnull(b.借方金额,0))+sum(a.贷方金额)-sum(b.借方金额)as 余额 from table1 a,table b where a.编号>b.编号