日期:2014-05-18 浏览次数:20660 次
建议你提供详细的资料: 例如表的结构,表之间的关系,测试数据,相关算法及需要的结果。 这样有助于我们理解你的意思,更主要的是能尽快让你获得答案或解决问题的方法。
------解决方案--------------------
在你的表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 行受影响)
*/
------解决方案--------------------