如表1
id  pay  
1   5.1
2   3.2
3   1
4   4.1
求表1中SUM(pay)<=10的记录的及和为10时那一条的余数,如想得到表2这样的结果
表2
id   pay    nopay
1    5.1     0
2    3.2     0
3    1       0
4    4.1     3.4

解决方案 »

  1.   

    create table tb(id int, pay decimal(18,1)) 
    insert into tb values(1 , 5.1) 
    insert into tb values(2 , 3.2) 
    insert into tb values(3 , 1 )
    insert into tb values(4 , 4.1)
    go
    select * , nopay = case when (select sum(pay) from tb where id <= t.id) <= 10 then 0 else (select sum(pay) from tb where id <= t.id) - 10 end  from tb t
    drop table tb /*
    id          pay                  nopay                                    
    ----------- -------------------- ---------------------------------------- 
    1           5.1                  .0
    2           3.2                  .0
    3           1.0                  .0
    4           4.1                  3.4(所影响的行数为 4 行)*/
      

  2.   

    楼上的,你真快,I FULL YOU
      

  3.   

    谢谢 dawugui 
    我可能举的例子刚好比较特殊,实际是可能表1有多条记录,如
    如表1 
    id  pay  
    1  5.1 
    2  3.2 
    3  1 
    4  4.1 
    5  2.3
    6   -10
    求表1中SUM(pay) <=10的记录的及和为10时那一条的余数,如想得到表2这样的结果 
    表2 
    id  pay    nopay 
    1    5.1    0 
    2    3.2    0 
    3    1      0 
    4    4.1    3.4
    表2中我只取了到满足条件的前4条,也就是说取到第一个NOPAY>0,如果10刚好是前4条的和也取到第4条