- 作者:xiaoxiao
- 发表时间:2020-12-23 10:57
- 来源:未知
原帖地址:
http://community.csdn.net/Expert/topic/3239/3239774.xml?temp=9.711856E-02
物料 批号 库存数aa p01 5aa p02 10bb p01 20
订单 物料 订货数1 aa 111 bb 102 aa 23 aa 1
要得到:
订单 物料 批号 出库1 aa p01 51 aa p02 61 bb p01 102 aa p02 23 aa p02 3
要求:使用update,不用函数、子查询、游标、循环,一句搞定。
------------------------------------------------------------------------------------------------------
--大致的思路
--测试数据create table ta(物料 varchar(10),批号 varchar(10),库存数 int)insert ta select 'aa','p01',5union all select 'aa','p02',10union all select 'aa','p03',20union all select 'bb','p01',2union all select 'bb','p02',20
create table tb(订单 int,物料 varchar(10),订货数 int)insert tb select 1,'aa',11union all select 1,'bb',10union all select 2,'aa',20union all select 3,'aa',1go
--生成临时表select b.订单,b.物料,a.批号,a.库存数,b.订货数,出库=cast(0 as int)from ta a,tb bwhere a.物料=b.物料order by b.物料,a.批号,b.订单go
--删除测试drop table ta,tb--实现思路
/*--生成的临时表如下
订单 物料 批号 库存数 订货数 出库 ---- ----- ---- ------ ------ -----1 aa p01 5 11 5 --还有6未分配,那就要等下一个批号来处理 --记下订单号12 aa p01 5 20 0 --不再处理,因为未分配数>03 aa p01 5 1 0 --不再处理,因为未分配数>01 aa p02 10 11 6 --有了新库存10,与上次未分配的订单号比较,>= --所以进行分配,分配的结果是库存余4,未分配数 --=0,记下本次订单号+1,如分配数>0,记本次订单号2 aa p02 10 20 4 --上次结余库存4,分配,余16未分配,记下订单号23 aa p02 10 1 0 --不再处理,因为未分本数>01 aa p03 20 11 0 --有新库存20,但订单号<上次记下的订单号,不处理2 aa p03 20 20 16 --满足条件,分配,余库库存43 aa p03 20 1 1 --满足条件,分配1 bb p01 2 10 2 --物料变化变化,重新开始分配,未分配数8 --记下订单号11 bb p02 20 10 8 --有新库存,分配