如表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
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
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 行)*/
我可能举的例子刚好比较特殊,实际是可能表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条