表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       

解决方案 »

  1.   

    呵呵,看不明白楼主的结果是怎么出来的
    还有那个CC倒底是多少,Value又是多少,是不是楼主给的结果也有问题???!!!
      

  2.   

    因为目前论坛有bug,会插入很多空格,所以将代码直接贴上来,会看不清.
    所以建议楼主将sql代码用
     包含起来,就好看多了.
      

  3.   

    因为目前论坛有bug,会插入很多空格,所以将代码直接贴上来,会看不清.
    所以建议楼主将sql代码用 
    <code=SQL></code>
    包含起来,就好看多了.将<号变成 [ 号
      

  4.   

    这是 无枪狙击手 写的。。功能要和他的一样。。但我不想用游标。还有其它方法吗?》
    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