日期:2014-05-18 浏览次数:20543 次
建议你提供详细的资料: 例如表的结构,表之间的关系,测试数据,相关算法及需要的结果。 这样有助于我们理解你的意思,更主要的是能尽快让你获得答案或解决问题的方法。
------解决方案--------------------
在你的表Table1里应该加一个标识列什么的,先进先出的问题貌似。
------解决方案--------------------
use Tempdb go --> --> if not object_id(N'Tempdb..#T1') is null drop table #T1 Go Create table #T1([名称] nvarchar(2),[数量] int) Insert #T1 select N'XX',10 union all select N'XX',200 Go ;WITH a AS ( SELECT *,ROW_NUMBER()OVER(ORDER BY GETDATE()) AS row FROM #T1 ),a2 AS ( SELECT *,sum1=(SELECT SUM([数量]) FROM a WHERE [名称]=[名称] AND row<=b.row) FROM a AS b ) UPDATE a2 SET [数量]=CASE WHEN sum1<=25 THEN 0 ELSE sum1-25 END WHERE sum1-[数量]<25 SELECT * FROM #T1 /* 名称 数量 XX 0 XX 185 */
------解决方案--------------------
if object_id('tb','U') is not null drop table tb go create table tb ( id int, 名称 varchar(10), 数量 int ) go insert into tb select 1,'洗衣粉',10 union all select 2,'洗衣粉',12 union all select 3,'冰棍',5 union all select 4,'洗衣粉',8 go update tb set 数量=case when (select sum(数量) from tb where id<=a.id and 名称='洗衣粉')<25 then 0 else (select sum(数量) from tb where id<=a.id and 名称='洗衣粉')-25 end from tb a where 名称='洗衣粉' select * from tb /* id 名称 数量 ----------- ---------- ----------- 1 洗衣粉 0 2 洗衣粉 0 3 冰棍 5 4 洗衣粉 5 (4 行受影响) */
------解决方案--------------------