Select a.id,(IsNULL(b.y,0)+a.d-a.j) as y
 from #tb a left join #tb b on a.id=b.id+1

解决方案 »

  1.   

    select A.id
           ,sum(B.y+B.d-B.j)
    from #tb A
    join #tb B on A.id>=B.id
    group by A.id
    order by A.id/*
    id                                
    ----------- --------------------- 
    1           32624.7500
    2           32674.7500
    3           32724.7500
    4           32774.7500
    5           32824.7500
    6           32874.7500
    7           32924.7500
    8           32944.7500
    9           33144.7500
    10          35144.7500(10 row(s) affected)
    */
      

  2.   

    vivianfdlpw 的方法真是可以啊,但是为什么我的就不行啊?
      

  3.   

    是不是实现'本行的y=上一行的y+本行的d-本行的j'这个功能吗?
      

  4.   

    a.id>b.id
    ====>
    a.id>=b.id
      

  5.   

    ----是不是实现'本行的y=上一行的y+本行的d-本行的j'这个功能吗?
    就是实现这个功能,vivianfdlpw() 写的这个可以实现。
    我写的那个,从表面上看也是对的。并且开始几条记录也是对的,可是后来却不对了。
      

  6.   

    select a.id,sum(b.y)+sum(b.d)-sum(b.j) from #tb a,#tb b
    where a.id>=b.id
    group by a.id
      

  7.   

    就是实现这个功能,vivianfdlpw() 写的这个可以实现。
    我写的那个,从表面上看也是对的。并且开始几条记录也是对的,可是后来却不对了
    =========>楼主只要执行下面语句就知道错在哪了.
    select * from #tb a,#tb b
    where a.id>b.id and a.id=8
    /*
    8 .0000 20.0000 .0000 1 .0000 .0000 32624.7500
    8 .0000 20.0000 .0000 2 .0000 50.0000 .0000
    8 .0000 20.0000 .0000 3 .0000 50.0000 .0000
    8 .0000 20.0000 .0000 4 .0000 50.0000 .0000
    8 .0000 20.0000 .0000 5 .0000 50.0000 .0000
    8 .0000 20.0000 .0000 6 .0000 50.0000 .0000
    8 .0000 20.0000 .0000 7 .0000 50.0000 .0000
    */