一次还500,应该是这个结果吧?
姓名 欠款    借款日      借据号
a    0.00    2001-01-01  1
a    0.00    2002-01-05  2
a    100.00  2004-10-11  3

解决方案 »

  1.   

    update 表
    set [欠款]=( case 
                   when 500>(select sum([欠款]) from 表 where [借据号]<=t.[借据号])
                   then 0
                   else
                   (select sum([欠款]) from 表 where [借据号]<=t.[借据号])-500
                 end
               )
    from 表 t
      

  2.   

    declare @tb table
    (
      [姓名] varchar(10),
      [欠款] decimal(10,2),
      [借款日] varchar(10),
      [借据号] int
    )
    insert @tb
    select 'a',100.00,'2001-01-01',1 union
    select 'a',200.00,'2002-01-05',2 union
    select 'a',300.00,'2004-10-11',3 --测试
    update @tb
    set [欠款]=( case 
                   when 500>(select sum([欠款]) from @tb where [借据号]<=t.[借据号])
                   then 0
                   else
                   (select sum([欠款]) from @tb where [借据号]<=t.[借据号])-500
                 end
               )
    from @tb tselect * from @tb--结果
    /*
    姓名         欠款           借款日        借据号         
    ---------- ------------ ---------- ----------- 
    a          .00          2001-01-01 1.00
    a          .00          2002-01-05 2.00
    a          100.00       2004-10-11 3.00(所影响的行数为 3 行)
    */
      

  3.   

    --vivianfdlpw() 
    无时无刻不在的牛人
    学生?工作?
    好象都不会这么有时间 
    pfpf
      

  4.   

    借据号其实是编号,不一定存在递增的关系.我这个例子不好,请看下表姓名 欠款    借款日     借据号
    a    200.00  2001-01-01 1010
    a    150.00  2002-01-05 1009
    a    180.00  2004-10-11 2080
    如果a一次还500元,我希望的结果是
    姓名 欠款    借款日      借据号
    a    0.00    2001-01-01  1010
    a    0.00    2002-01-05  1009
    a    30.00  2004-10-11   2080
    sql语句应该如何写?