日期:2014-05-18  浏览次数:20494 次

数据表数量消减问题
数据表Table1 
Table1:
名称 数量 
XX 10
XX 200  

前台显示XX这个商品的数量总和,但需要消减数量时,可能出现下面这种情况:

Table1: 
名称 数量
XX 10
XX 15
这时如果要消减数量25,请问该如何解决?

------解决方案--------------------
SQL code

建议你提供详细的资料:
例如表的结构,表之间的关系,测试数据,相关算法及需要的结果。
这样有助于我们理解你的意思,更主要的是能尽快让你获得答案或解决问题的方法。

------解决方案--------------------
在你的表Table1里应该加一个标识列什么的,先进先出的问题貌似。
------解决方案--------------------
SQL code
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
*/

------解决方案--------------------
SQL code

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 行受影响)

*/

------解决方案--------------------
探讨

SQL code

if object_id('tb','U') is not null
drop table tb
go
create table tb
(
id int,
[count] int
)
go
insert into tb
select 1,2 union all
select 2,3 union all
select 3,5
go
update tb set [co……