Update 急

wujinyuan 2007-11-28 05:52:22
表test(Id int,value int)
insert into test values(1,12)
insert into test values(2,22)
insert into test values(3,42)
insert into test values(4,52)

sum(value) 总数是为128
要实现功能 如有一个数 我要用 test里面的value值减cc=55
第一笔 if value> =cc then value = value-cc,cc=0 --将value的值update 到test 表中
if value < cc then value = 0,cc=cc-value --将value的值update 到test 表中
--如果cc大于0 就减下一笔。。一直减到cc为0 注意表test sum(value)一定是大于cc的

使结果如下
1,0
2,0
3,21
4,52
...全文
93 7 打赏 收藏 转发到动态 举报
写回复
用AI写文章
7 条回复
切换为时间正序
请发表友善的回复…
发表回复
wujinyuan 2007-11-29
  • 打赏
  • 举报
回复
这是 无枪狙击手 写的。。功能要和他的一样。。但我不想用游标。还有其它方法吗?》
create table test(Id int,value int)
insert into test values(1,12)
insert into test values(2,22)
insert into test values(3,42)
insert into test values(4,52)

declare @cc int
set @cc = 55
declare @id int
declare @value int
declare cur cursor for select id,value from test
open cur
fetch next from cur into @id,@value
while @@fetch_status = 0
begin
if @value < @cc
begin
update test set value = 0 where id = @id
set @cc = @cc - @value
end
else
begin
update test set value = value - @cc where id = @id
set @cc = 0
end
if @cc = 0 break
fetch next from cur into @id,@value
end
close cur
deallocate cur
select * from test

/*


Id value
----------- -----------
1 0
2 0
3 21
4 52

(所影响的行数为 4 行)
*/
drop table test
hui_hui_2007 2007-11-28
  • 打赏
  • 举报
回复
因为目前论坛有bug,会插入很多空格,所以将代码直接贴上来,会看不清.
所以建议楼主将sql代码用
<code=SQL>

</code>
包含起来,就好看多了.将<号变成 [ 号
hui_hui_2007 2007-11-28
  • 打赏
  • 举报
回复
因为目前论坛有bug,会插入很多空格,所以将代码直接贴上来,会看不清.
所以建议楼主将sql代码用
 
包含起来,就好看多了.
earthpea 2007-11-28
  • 打赏
  • 举报
回复
看不懂~~~~
云中客 2007-11-28
  • 打赏
  • 举报
回复
呵呵,看不明白楼主的结果是怎么出来的
还有那个CC倒底是多少,Value又是多少,是不是楼主给的结果也有问题???!!!
dawugui 2007-11-28
  • 打赏
  • 举报
回复
我估计是个累计算法.

不过还是没怎么看明白.
hh1314588 2007-11-28
  • 打赏
  • 举报
回复
看的不是很明白啊!

34,589

社区成员

发帖
与我相关
我的任务
社区描述
MS-SQL Server相关内容讨论专区
社区管理员
  • 基础类社区
  • 二月十六
  • 卖水果的net
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧