楼上的没有仔细看吧?按ID的顺序确定优先级别,按stocknum字段的值最大话满足,例子里给定的是待分配的数是35,ID号为1 的stocknum是20,所以把35中的20分给它,然后是ID号为2,stocknum是10,剩下是15,就分给它10,最后ID为3的,虽然为30,但只剩下5了,所以分给它的是5,所有的分配都放在lastnum的列上,这样说不知道明白没有?我要求一条语句实现这样的分配不知道行不,否则也给出其他方法也可,谢谢

解决方案 »

  1.   

    云啊,楼上两为让人很郁闷,我的意思表达的很清楚了, 待分配的数字比如是 @wait_num 在例子中的值是35,然后按ID的优先顺序分配到stock_b表中的lastnum字段上,但分配的数字要满足stocknum>=lastnum 这个要求,这样已经够明白了吧,在不明白我也无话可说了,或许灵醒点都睡觉了
      

  2.   

    create table #t(id int identity(1,1),stocknum int,lastnum int)
    insert into #t
    select 20,0 union all
    select 10,0 union all 
    select 30,0update a set lastnum=(case when (select sum(stocknum) from #t where id<=a.id)>=35 then 35-stocknum else stocknum end) from #t a
    select * from #t--结果
    /*
    id          stocknum    lastnum     
    ----------- ----------- ----------- 
    1           20          20
    2           10          10
    3           30          5
    */
      

  3.   

    --改下,还有点错drop table #t
    create table #t(id int identity(1,1),stocknum int,lastnum int)
    insert into #t
    select 20,0 union all
    select 33,0 union all 
    select 30,0update a 
    set lastnum=(case when (select sum(stocknum) from #t where id<=a.id)>=35 then case when 35>=(select sum(stocknum) from #t where id<a.id) then 35-(select sum(stocknum) from #t where id<a.id) else 0 end else stocknum end) 
    from #t aselect * from #t