update 表 set [欠款]=( case when 500>(select sum([欠款]) from 表 where [借据号]<=t.[借据号]) then 0 else (select sum([欠款]) from 表 where [借据号]<=t.[借据号])-500 end ) from 表 t
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 行) */
--vivianfdlpw() 无时无刻不在的牛人 学生?工作? 好象都不会这么有时间 pfpf
借据号其实是编号,不一定存在递增的关系.我这个例子不好,请看下表姓名 欠款 借款日 借据号 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语句应该如何写?
set [欠款]=( case
when 500>(select sum([欠款]) from 表 where [借据号]<=t.[借据号])
then 0
else
(select sum([欠款]) from 表 where [借据号]<=t.[借据号])-500
end
)
from 表 t
(
[姓名] 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 行)
*/
无时无刻不在的牛人
学生?工作?
好象都不会这么有时间
pfpf
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语句应该如何写?