declare @i int
set @i=0
update t set @i=f4+f2-f3+@i,f4=@i

解决方案 »

  1.   

    如果需要更新表中的数据,用pbsql(风云)的就可以。
    如果只需要查询:
    -----------------------------------------------------
    select 
        a.f1,
        a.f2,
        a.f3,
        f4 = (select sum(f2-f3+f4) from t where f1<=a.f1)
    from
        t a
      

  2.   


    update tablef
    set f4=(select sum(f2-f3+f4) from tablef as a where a.f1<=tablef.f1)
    也可以实现批量更新
      

  3.   

    update tablef
    set f4=(select f4 from tablef as a where a.f1<=tablef.f1) + f2 - f3
      

  4.   

    大家的回复都忽略了第一行数据“f4=12”,因此所有的sql语句都达不到结果是:  f1      f2     f3     f4
     A        0      0      12
     B        100    0      112
     C        20     0      132
     D        300    20     412
     E        0     120     292只是实现了:  f1      f2     f3     f4
     A        0      0      0
     B        100    0      100
     C        20     0      120
     D        300    20     400
     E        0     120     280请重新考虑了一下SQL语句
      

  5.   

    如果是要查询--建立测试环境
    Create Table TEST 
    (f1 Varchar(10),
     f2 Int,
     f3 Int,
     f4 Int)
    --插入数据
    Insert TEST Values('A',        0,      0,      12)
    Insert TEST Values('B',        100,    0,      0)
    Insert TEST Values('C',        20,     0,      0)
    Insert TEST Values('D',        300,    20,     0)
    Insert TEST Values('E',        0,      120,    0)
    --测试
    Select 
    f1,
    f2,
    f3,
    f4=(Select SUM(f2-f3+f4) from TEST Where f1<=A.f1)
    from TEST A
    --删除测试环境
    Drop Table TEST
    --结果
    /*
    f1 f2 f3 f4
    A 0 0 12
    B 100 0 112
    C 20 0 132
    D 300 20 412
    E 0 120 292
    */
      

  6.   


    如果是要更新
    --建立测试环境
    Create Table TEST 
    (f1 Varchar(10),
     f2 Int,
     f3 Int,
     f4 Int)
    --插入数据
    Insert TEST Values('A',        0,      0,      12)
    Insert TEST Values('B',        100,    0,      0)
    Insert TEST Values('C',        20,     0,      0)
    Insert TEST Values('D',        300,    20,     0)
    Insert TEST Values('E',        0,      120,    0)
    --测试
    Update A Set f4=(Select SUM(f2-f3+f4) from TEST Where f1<=A.f1) from TEST ASelect * from TEST
    --删除测试环境
    Drop Table TEST
    --结果
    /*
    f1 f2 f3 f4
    A 0 0 12
    B 100 0 112
    C 20 0 132
    D 300 20 412
    E 0 120 292
    */