关于SQL Server的循环更新问题
数据表:日期总数已用剩余2013-05-315052013-06-3010010输入数值:6希望得到的结果:日期总数已用剩余2013-05-315502013-06-30...
数据表:
日期 总数 已用 剩余
2013-05-31 5 0 5
2013-06-30 10 0 10
输入数值:6
希望得到的结果:
日期 总数 已用 剩余
2013-05-31 5 5 0
2013-06-30 10 1 9
非常感谢! 展开
日期 总数 已用 剩余
2013-05-31 5 0 5
2013-06-30 10 0 10
输入数值:6
希望得到的结果:
日期 总数 已用 剩余
2013-05-31 5 5 0
2013-06-30 10 1 9
非常感谢! 展开
展开全部
建表[M_Info做表名 日期[M_Datetime ], 总数[Fssums], 已用[Used], 剩余[Brand_new]:
CREATE Table M_Info(
M_Datetime Datetime,
Fssums int,
Used int,
Brand_new int)
INSERT INTO M_Info Values('2013-05-31', 5, 0, 5)
INSERT INTO M_Info Values('2013-06-30', 10, 0, 10)
代码部分:
DECLARE @Input int
DECLARE @MinDT DateTime
SET @Input = 6
While @Input>0
begin
SELECT @MinDT = MIN(M_Datetime) from M_Info where Brand_new>0
UPDATE A SET A.Used = A.Used + 1, A.Brand_new = A.Brand_new - 1 FROM M_Info A
WHERE A.Brand_new>0 AND A.M_Datetime=@MinDT
SET @Input = @Input - 1
end
我觉得有更好的办法, 使用同表连接用Exists来判断日期, 我这里用了一个@MinDT变量, 我的意思是这个变量应该有办法不使用的!期待高手!
展开全部
建表[M_Info做表名 日期[M_Datetime ], 总数[Fssums], 已用[Used], 剩余[Brand_new]:
CREATE Table M_Info(
M_Datetime Datetime,
Fssums int,
Used int,
Brand_new int)
INSERT INTO M_Info Values('2013-05-31', 5, 0, 5)
INSERT INTO M_Info Values('2013-06-30', 10, 0, 10)
代码部分:
DECLARE @Input int
DECLARE @MinDT DateTime
SET @Input = 6
While @Input>0
begin
SELECT @MinDT = MIN(M_Datetime) from M_Info where Brand_new>0
UPDATE A SET A.Used = A.Used + 1, A.Brand_new = A.Brand_new - 1 FROM M_Info A
WHERE A.Brand_new>0 AND A.M_Datetime=@MinDT
SET @Input = @Input - 1
end
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
with t1 as (select 6 as flag)
select a.日期,a.总数,(case when (tmp_data-flag)<=0 then 0 else (tmp_data-flag) end) as "已用",
a.总数- (case when (tmp_data-flag)<=0 then 0 else (tmp_data-flag) end ) as “剩余"
from (
select a.日期,a.总数,a.已用,a.剩余,sum(b.总数) tmp_data
from (select 日期,总数,已用,剩余,row_number() over(order by 日期 asc) num from table_name) a
left join (select 日期,总数,已用,剩余,row_number() over(order by 日期 asc) num from table_name) b on a.num>=b.num
group by a.日期,a.总数,a.已用,a.剩余
) p, t1
这样吧
select a.日期,a.总数,(case when (tmp_data-flag)<=0 then 0 else (tmp_data-flag) end) as "已用",
a.总数- (case when (tmp_data-flag)<=0 then 0 else (tmp_data-flag) end ) as “剩余"
from (
select a.日期,a.总数,a.已用,a.剩余,sum(b.总数) tmp_data
from (select 日期,总数,已用,剩余,row_number() over(order by 日期 asc) num from table_name) a
left join (select 日期,总数,已用,剩余,row_number() over(order by 日期 asc) num from table_name) b on a.num>=b.num
group by a.日期,a.总数,a.已用,a.剩余
) p, t1
这样吧
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
变态的需求。
假定表名称为A,有ID字段,总数为zs,已用为yy,剩余字段请自行解决。
declare @sl int
set @sl=6
declare @sysl int
declare @id int
while @sl>0
begin
set @id = (SELECT top 1 id FROM A where zs-yy>0)
set @sysl = (select zs-yy from A where id=@id)
if @sl>@sysl
begin
update a set yy=@sysl where id=@id
end
else
begin
update a set yy=@sl where id=@id
end
set @sl=@sl-@sysl
if @sl <=0
break
else
continue
end
假定表名称为A,有ID字段,总数为zs,已用为yy,剩余字段请自行解决。
declare @sl int
set @sl=6
declare @sysl int
declare @id int
while @sl>0
begin
set @id = (SELECT top 1 id FROM A where zs-yy>0)
set @sysl = (select zs-yy from A where id=@id)
if @sl>@sysl
begin
update a set yy=@sysl where id=@id
end
else
begin
update a set yy=@sl where id=@id
end
set @sl=@sl-@sysl
if @sl <=0
break
else
continue
end
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
sqlserver什么版本?
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询