具体描述如下:
设计三张数据表,1、库存表,2、订单明细表,3、分配结果表
需要用SQL对一批订单明细(不同的商品),批量进行库存的分配,分配的结果写入分配结果表;
说明:
1、同一个商品,同一个批号,可能存在多个不同的货位;
2、可能出现多个订单明细分配同一个货位(出库同样的商品\批号),也可能出现一个订单明细分配多个货位(一个货位的数量不够);
3、希望用SQL批量计算,产生分配结果;
请大神们帮忙提供下思路,多谢!
表结构如下:
库存表:
字段名 含义
GOODSID 商品编码(主键)
GOODSBATCH 商品批号
POS 仓库货位
STOCKNUM 库存数量
订单明细表:
字段名 含义
ORDERNO 订单编号
LNO 订单明细行号
GOODSID 商品编码
GOODSBATCH 商品批号
OUTNUM 订单数量
分配结果表:
GOODSID 商品编码(主键)
GOODSBATCH 商品批号
POS 仓库货位
NUM 数量
ORDERNO 订单编号
LNO 订单明细行号
应该用存贮写,我看了一下我们用的wms就是用存储写的 分配,
用存储过程,循环批量处理就是了。单一的查询写起来就简单了。
用存储过程处理,但希望有sql批量生成,不用游标循环~
这已经属于复杂的业务逻辑了,还用一个SQL语句实现?这有点不合理吧。
如果用SQL实现,可以一下思路
1、库存表,按照商品编号,货位号排序,每个商品编号内,每条记录的库存总量都是上面的总和形成临时结果集 G
2、订单表,按照商品编号排序,每个商品编号内,每条记录的订单数量都是上面的总和形成临时结果集 D
3、根据D和G两个临时结果集,按照D表中的订单数量查找G表中第一条大于该订单数量的记录。可以形成另一个结果集R
4、整理R,R表中当前记录的所需要的货位号就是上一条记录的货位号和当前记录的货位号范围。