create table 库存表(物料编码 varchar(10),货位 varchar(10),数量 int)
go
 
insert 库存表 select 'WL01', 'A', 8 
insert 库存表 select 'WL01', 'B' ,10 
insert 库存表 select 'WL01', 'C', 15 
go
select 物料编码,货位,出货数量=(case when (select sum(数量) from 库存表 where 数量<=a.数量)<=20 then 数量 else 20-(select sum(数量) from 库存表 where 数量<a.数量) end)  From  库存表 a 
order by 物料编码
go
drop table 库存表
go
/*
物料编码       货位         出货数量        
---------- ---------- ----------- 
WL01       A          8
WL01       B          10
WL01       C          2
*/

解决方案 »

  1.   

    create table 库存表(物料编码 varchar(10),货位 varchar(10),数量 int)
    go
     
    insert 库存表 select 'WL01', 'A', 8 
    insert 库存表 select 'WL01', 'B' ,10 
    insert 库存表 select 'WL01', 'C', 15 
    go
    select 物料编码,货位,出货数量=(case when (select sum(数量) from 库存表 where 物料编码=a.物料编码 and  数量<=a.数量)<=20 then 数量 else 20-(select sum(数量) from 库存表 where 物料编码=a.物料编码 and  数量<a.数量) end)  From  库存表 a 
    -- 加上物料代码判断
    where 物料编码='WL01'
    order by 物料编码
    go
    drop table 库存表
    go
    /*
    物料编码       货位         出货数量        
    ---------- ---------- ----------- 
    WL01       A          8
    WL01       B          10
    WL01       C          2
    */
      

  2.   

    而且如果出库数是10时 结果
    WL01 A 8
    WL01 B 2
    WL01 C -8
    出现负数
    正确结果应该为:WL01 A 8
    WL01 B 2