`
逆风的香1314
  • 浏览: 1430456 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

先进先出的订单分配处理

阅读更多

原帖地址:

http://community.csdn.net/Expert/topic/3239/3239774.xml?temp=9.711856E-02

物料 批号 库存数
aa p01 5
aa p02 10
bb p01 20

订单 物料 订货数
1 aa 11
1 bb 10
2 aa 2
3 aa 1


要得到:

订单 物料 批号 出库
1 aa p01 5
1 aa p02 6
1 bb p01 10
2 aa p02 2
3 aa p02 3


要求:
使用update,不用函数、子查询、游标、循环,一句搞定。

------------------------------------------------------------------------------------------------------

--大致的思路

--测试数据
create table ta(物料 varchar(10),批号 varchar(10),库存数 int)
insert ta select 'aa','p01',5
union all select 'aa','p02',10
union all select 'aa','p03',20
union all select 'bb','p01',2
union all select 'bb','p02',20

create table tb(订单 int,物料 varchar(10),订货数 int)
insert tb select 1,'aa',11
union all select 1,'bb',10
union all select 2,'aa',20
union all select 3,'aa',1
go

--生成临时表
select b.订单,b.物料,a.批号,a.库存数,b.订货数,出库=cast(0 as int)
from ta a,tb b
where a.物料=b.物料
order by b.物料,a.批号,b.订单
go

--删除测试
drop table ta,tb
--实现思路

/*--生成的临时表如下

订单  物料  批号 库存数 订货数  出库   
---- ----- ---- ------ ------ -----
1    aa    p01  5      11     5 --还有6未分配,那就要等下一个批号来处理
                                    --记下订单号1
2    aa    p01  5      20     0 --不再处理,因为未分配数>0
3    aa    p01  5      1      0 --不再处理,因为未分配数>0
1    aa    p02  10     11     6 --有了新库存10,与上次未分配的订单号比较,>=
                                     --所以进行分配,分配的结果是库存余4,未分配数
                                     --=0,记下本次订单号+1,如分配数>0,记本次订单号
2    aa    p02  10     20     4 --上次结余库存4,分配,余16未分配,记下订单号2
3    aa    p02  10     1      0 --不再处理,因为未分本数>0
1    aa    p03  20     11     0 --有新库存20,但订单号<上次记下的订单号,不处理
2    aa    p03  20     20     16     --满足条件,分配,余库库存4
3    aa    p03  20     1      1 --满足条件,分配
1    bb    p01  2      10     2 --物料变化变化,重新开始分配,未分配数8
                                     --记下订单号1
1    bb    p02  20     10     8 --有新库存,分配

(所影响的行数为 11 行)
--*/

--------------------------------------------------------------------------------------------------------------


--测试数据
create table ta(物料 varchar(10),批号 varchar(10),库存数 int)
--/*--第一套测试数据
insert ta select 'aa','p01',5
union all select 'aa','p02',10
union all select 'bb','p01',20
--*/

/*--第二套测试数据
insert ta select 'aa','p01',5
union all select 'aa','p02',10
union all select 'aa','p03',20
union all select 'bb','p01',2
union all select 'bb','p02',20
--*/

/*--第三套测试数据
insert ta select 'aa','p01',50
union all select 'aa','p02',10
union all select 'bb','p01',20
--*/

/*--第四套测试数据
insert ta select 'aa','p01',50
union all select 'aa','p02',8
union all select 'aa','p03',6
union all select 'aa','p04',3
union all select 'bb','p01',2
union all select 'bb','p02',20
--*/

create table tb(订单 int,物料 varchar(10),订货数 int)
--/*--第一套测试数据
insert tb select 1,'aa',11
union all select 1,'bb',10
union all select 2,'aa',2
union all select 3,'aa',1
--*/

/*--第二套测试数据
insert tb select 1,'aa',11
union all select 1,'bb',10
union all select 2,'aa',20
union all select 3,'aa',1
--*/

/*--第三套测试数据
insert tb select 1,'aa',11
union all select 1,'bb',10
union all select 2,'aa',2
union all select 3,'aa',1
--*/

/*--第四套测试数据
insert tb select 1,'aa',7
union all select 1,'bb',10
union all select 2,'aa',8
union all select 2,'bb',8
union all select 3,'aa',1
--*/
go

select b.订单,b.物料,a.批号,a.库存数,b.订货数,出库=cast(0 as int)
 ,未分配=cast(null as int),库存结余=cast(null as int),未配订单=cast(null as int)
into #t
from ta a,tb b
where a.物料=b.物料
order by b.物料,a.批号,b.订单

--生成出库数据
declare @物料 varchar(10),@批号 varchar(10),@订单 int
declare @出库 int,@库存 int,@未分配 int

update #t set
 @库存=case when 物料=@物料
   then case when 批号=@批号 then @库存 else @库存+库存数 end
   else 库存数  end,
 @出库=case when @库存>0
  then case when @物料=物料
    then case when isnull(@订单,订单)<=订单
     then case when @未分配>0
      then case when @库存<@未分配 then @库存 else @未分配 end
      else case when @库存<订货数 then @库存 else 订货数 end end
     else 0 end
    else case when @库存<订货数 then @库存 else 订货数 end end
  else 0 end,
 @未分配=case when @出库>0
  then case when @物料=物料 and @未分配>0
   then @未分配-@出库
   else 订货数-@出库 end
  else @未分配 end,
 @订单=case when @物料=物料
  then case when @出库>0
   then case when @未分配>0 then 订单 else 订单+1 end
   else @订单 end
  else case when @未分配>0 then 订单 else 订单+1 end end,
 @库存=@库存-@出库,
 出库=@出库,
 
 未分配=@未分配,库存结余=@库存,未配订单=@订单,
 @物料=物料,@批号=批号

--显示更新结果
select 订单,物料,批号,出库 from #t
where 出库>0
order by 订单,物料,批号
go

--删除测试
drop table ta,tb
drop table #t

/*--测试结果

订单          物料         批号         出库         
----------- ---------- ---------- -----------
1           aa         p01        5
1           aa         p02        6
1           bb         p01        10
2           aa         p02        2
3           aa         p02        1

(所影响的行数为 5 行)
--*/

/*---一些说明:

处理语句中的下述这些,只是为了调试时,方便观察用的,没有实际处理用处:
未分配=@未分配,库存结余=@库存,未配订单=@订单,

同样的,生成临时表中的下述这些也只是调试用的(实际处理不需要):
,未分配=cast(null as int),库存结余=cast(null as int),未配订单=cast(null as int)
--*/

分享到:
评论

相关推荐

    Desktop_SQLServerWITHAS_订单分配_

    库存分配涉及到库存管理策略,如先进先出(FIFO)、后进先出(LIFO)、定量订货法、定期订货法等,以及如何根据订单预测、销售趋势和库存水平来优化这些策略。 标签"SQLServerWITHAS 订单分配"进一步强调了我们关注...

    Exceed_订单处理.pdf

    EXceed系统,作为一款先进的仓库管理软件,通过其订单处理模块,实现了从接收订单到最终出货的全过程自动化和精细化管理。 **1. 订单处理的作用** 订单处理是仓库中实施货物记录、拣选和出货的一种机制,旨在提高...

    物流中心的订单处理(DOC 125) .doc

    物流中心的订单处理是流通行业中至关重要的一环,它直接影响到供应链的...管理者需要理解订单处理在整个供应链中的作用,建立适应业务需求的处理流程,并利用先进的信息技术来优化订单处理,以满足市场变化带来的挑战。

    物流中心的订单处理讲义.ppt

    订单处理的范围包括接单作业、接单方式、订单资料输入、查核确认、库存分配、出货指示单据的输出,以及订单进度和异动管理。接单作业可以是传统的电话、传真或邮寄订单,也可以是电子订货系统(EOS),如POS销售时点...

    先进先出作业管理办法.doc

    《先进先出作业管理办法》是企业实施有效库存管理的重要制度,尤其在IT行业中,对于原材料、半成品和产成品的高效周转和品质保障至关重要。该办法旨在确保所有物料的合理利用,防止因积压导致的资源浪费,保护企业的...

    物流中心的订单处理.ppt

    《物流中心的订单处理》的讲解主要涵盖了物流...总结来说,物流中心的订单处理是一个复杂的过程,涉及到供应链的各个环节,需要不断适应市场变化,采用先进技术,优化作业流程,以提高整个物流系统的效率和服务质量。

    B电商智能物流中心订单分波(处理)优化设计.zip

    例如,通过对历史数据的分析,可以识别出订单高峰时段,从而针对性地设定分波策略,避免在高峰期过于集中处理导致的拥堵。 其次,采用合适的分波算法是关键。常见的算法有时间窗法、订单相似度法、订单量阈值法等。...

    行业分类-设备装置-一种进行订单处理的方法和装置.zip

    读者可以期待从文件中获取到关于如何改进订单处理流程的深入见解,以及如何利用先进技术提升业务效能的实践指导。 总的来说,这个主题涵盖了信息技术在订单处理中的应用,涉及了从软件算法到硬件设备的全面解决方案...

    京东订单多维度调度系统PRD1.0

    - 支持多维度的订单分配策略,如订单量、商品类型、仓库容量、配送距离等,以优化物流效率。 - 提供灵活的权限管理机制,确保不同部门和角色的工作人员能按需访问和操作相应功能。 - 保障系统的稳定性与可扩展性,...

    VF企业订单管理系统论文

    3. 订单处理:VF企业订单管理系统应具备强大的订单处理能力,包括订单分类、优先级设定、订单合并等功能,以优化生产调度和资源分配。此外,系统需能实时更新订单状态,便于销售团队和客户随时追踪。 4. 跟踪与沟通...

    美团技术沙龙-第50期:2-何轼《订单交易平台化建设实践》.pdf

    1. 技术架构设计:如何将订单处理系统设计成一个平台化、服务化的架构,这可能涉及微服务架构、模块化设计等现代软件工程的先进技术。 2. 高并发处理:外卖订单系统作为典型的高并发应用场景,必须能够处理大量的...

    京东订单多维度调度系统PRD1.0.docx

    - **订单调度主要逻辑**:系统采用先进的调度算法,根据订单的优先级、库存状态、物流能力等多个维度进行智能分配,确保订单在最短时间内被正确处理。 - **调度机制**:系统通过实时监测订单状态,自动触发调度...

    京东订单多维度调度系统PRD1.0的副本.docx

    京东订单多维度调度系统是一款专为电子商务平台设计的高级订单管理系统,旨在提升订单处理效率,优化资源分配,确保服务质量,并实现精细化运营。该系统通过多种维度进行订单调度,以适应复杂的业务场景和用户需求。...

    订单扫描装箱系统

    1. **订单分配**:系统根据订单量和仓库布局,自动将订单分配给合适的拣选员。这有助于优化拣选路径,减少拣选时间。 2. **商品拣选**:拣选员使用手持终端设备,通过扫描商品上的条形码或二维码,确认商品与订单...

    17.化工行业存货分配案例解析(2020-05-06).docx

    1. 规则一:基于FIFO(先进先出)原则,首先筛选可用状态为A或Q的卷(排除STK和其他PAC单位),并且系数小于或等于20。这个规则首先分配系数小的库存,然后是轴。结果是分配了2卷20米,2卷10米,和1卷20米,满足了80...

    昱杰订单管理系统(ThinkPHP版)

    总结起来,昱杰订单管理系统(ThinkPHP版)是一个全面的订单处理解决方案,结合了先进的开发技术和业务实践,旨在为企业提供高效、安全、易用的订单管理体验。通过深入理解和运用其中的技术原理,企业不仅可以提升...

    超市订单管理系统smbms.zip

    本文将详细介绍标题为“超市订单管理系统smbms.zip”的项目,该项目采用了一系列先进的技术和框架,如Tomcat、Maven、Java以及Mysql,旨在实现对超市订单的全方位、高效管理,同时也涵盖了用户和供应商的管理功能。...

    购票火车购票系统

    队列是一种先进先出(FIFO,First In First Out)的数据结构,它在处理购票这样的实时请求场景中具有很高的适用性。在实际的购票系统中,乘客购票请求会按照时间顺序进入队列,然后依次被处理,这恰好符合火车站售票...

    11.Exceed_动态分配及捡货.pdf

    - **周转规则**:定义货物的进出顺序,例如先进先出(FIFO)、后进先出(LIFO)等。 - **日期变化**:设定允许的最大日期变化范围,以确定哪些托盘或箱子符合拣选条件。 - **补货策略**:决定何时启动补货流程,以及...

    第章电子商务订单履行与物流.ppt

    例如,当客户下单时,系统会自动将订单分配到最近的仓库,然后通过自动化设备和条形码系统进行拣选、包装和发货。这一系列操作使得亚马逊能够处理海量订单,甚至出租仓储空间给其他零售商,体现了物流系统的规模经济...

Global site tag (gtag.js) - Google Analytics