求大神,分配问题

ming_Y 2016-07-16 12:12:19
1.订单表
rkey 订单号 订单数 回复交期
1 10001 1000 2016-6-1
2 10002 20000 2016-6-5
3 10003 3500 2016-6-13
2.成品入仓表
rkey 入库单号 入库数 入库日期
1000 20001 200 2016-5-25
1001 20002 300 2016-5-29
1002 20003 400 2016-5-30
1010 20004 400 2016-6-2
1015 20005 1000 2016-6-3
1016 20006 500 2016-6-4
1017 20007 800 2016-6-4
1021 20008 2000 2016-6-5
1023 20009 1500 2016-6-6
1050 20010 3200 2016-6-8
1059 20011 5000 2016-6-9
1064 20012 2200 2016-6-10
1080 20013 3000 2016-6-12
1083 20014 1000 2016-6-13
1084 20015 3600 2016-6-15

3表
1表rkey 2表rkey 入库单号 分配数
1 1000 20001 200
1 1001 20002 300
1 1002 20003 400
2 1010 20004 300 ( 因上单只分配了900,欠数100,扣除100,400-100=300)
2 1015 20005 1000
2 1016 20006 500
2 1017 20007 800
2 1021 20008 2000
3 1083 20014 500 ( 因上单只分配了4600,欠数15400,扣除15400,(1500+3200+5000+2200+3000+1000)-15400=500)
。。。。。。
问题:通过1订单表,2成品入仓表,写SQL实现3表的内容(除括号内备注信息),分配方法:
1.入仓日期<=订单回复交期进行分配
2.分配下订单时先检查上订单是否有欠数,如有欠数需先扣除所欠数量(先入的先扣,扣除部分一定不能进行分配),剩余多的成品如入仓日期<=下订单回复交期方可分配至下订单
3.上面只是例出的小部分数据,每天数据都是动态的,我要写成存储过程,作成作业

谢谢!
...全文
187 7 打赏 收藏 转发到动态 举报
写回复
用AI写文章
7 条回复
切换为时间正序
请发表友善的回复…
发表回复
ming_Y 2016-07-18
  • 打赏
  • 举报
回复
版主,大神们现身说法吧
ming_Y 2016-07-16
  • 打赏
  • 举报
回复
大神周末都休息,顶下别沉了
ming_Y 2016-07-16
  • 打赏
  • 举报
回复
3表后面几条数据有点错位
ming_Y 2016-07-16
  • 打赏
  • 举报
回复
入库单号20001,20002,20003 的日期<订单的回复交期,数量是200+300+400=900 ,900是这几笔的汇总
ming_Y 2016-07-16
  • 打赏
  • 举报
回复
引用 4 楼 ap0405140 的回复:
请问: 订单号10001的订单数=1000, 为什么要只分配了900? 而不是其他数,如899或901. 订单号10002的订单数=20000, 为什么只分配了4600? 而不是其他数.
我分配规则是入库日期<=订单回复交期才分配,因为满足这条件的只有900的入库成品,所以是900
唐诗三百首 2016-07-16
  • 打赏
  • 举报
回复
请问: 订单号10001的订单数=1000, 为什么要只分配了900? 而不是其他数,如899或901. 订单号10002的订单数=20000, 为什么只分配了4600? 而不是其他数.
jiangjubo 2016-07-16
  • 打赏
  • 举报
回复
#t 是库存表 #tt 是订单表 其中factqtyi 为实际分到的数量 orderqtyi 为订单数 productid 为产品表

CREATE TABLE #t(productid INT,qtyi INT)

INSERT #t
        ( productid, qtyi )
SELECT 1,50 UNION ALL
SELECT 2,23 UNION ALL
SELECT 3,76 UNION ALL
SELECT 4,85 UNION ALL
SELECT 5,40 UNION ALL
SELECT 6,90


CREATE TABLE #tt (branchid VARCHAR(20), productid INT,orderqtyi INT,factqtyi INT)

INSERT #tt
        ( branchid ,      productid ,     orderqtyi ,     factqtyi    )
SELECT 'A1',1,8,0 UNION ALL
SELECT 'A2',1,18,0 UNION ALL
SELECT 'A3',1,29,0 UNION ALL
SELECT 'B1',2,7,0 UNION ALL
SELECT 'B2',2,8,0 UNION ALL
SELECT 'B3',2,9,0 UNION ALL
SELECT 'B4',2,18,0 UNION ALL
SELECT 'C1',3,11,0 UNION ALL
SELECT 'C2',3,23,0 UNION ALL
SELECT 'C3',3,43,0 UNION ALL
SELECT 'D1',4,52,0 UNION ALL
SELECT 'D2',4,19,0 UNION ALL
SELECT 'E1',5,14,0 UNION ALL
SELECT 'E2',5,17,0 UNION ALL
SELECT 'E3',5,65,0 



SELECT a.qtyi,B.* INTO #t3 FROM #t a INNER JOIN #tt b ON a.productid = b.productid

DECLARE @orderqtyi INT ,@qtyi INT ,@tran INT ,@branchid VARCHAR(5),@productid int

SET @orderqtyi=0
SET @qtyi=100
SET @tran=0
SET @branchid=''
SET @productid=0


UPDATE #t3 
SET @tran=CASE WHEN @productid=productid THEN 0 ELSE 1 END ,
    @productid=productid,
    @qtyi=CASE WHEN @tran=1 THEN qtyi ELSE 
	            CASE WHEN @qtyi>@orderqtyi THEN @qtyi-@orderqtyi ELSE 0 END 
				                      END ,
    @orderqtyi=orderqtyi,
	factqtyi=CASE WHEN @qtyi>0 THEN  
	               CASE WHEN orderqtyi>@qtyi THEN  @qtyi  ELSE orderqtyi  END 
				             ELSE    0   END 
 
SELECT * FROM #t3



DROP TABLE #t
DROP TABLE #tt
DROP TABLE #t3

22,209

社区成员

发帖
与我相关
我的任务
社区描述
MS-SQL Server 疑难问题
社区管理员
  • 疑难问题社区
  • 尘觉
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧