当前位置: 代码迷 >> Sql Server >> 关于生产排程的有关问题,怎么写SQL,有什么方法
  详细解决方案

关于生产排程的有关问题,怎么写SQL,有什么方法

热度:45   发布时间:2016-04-24 10:43:51.0
关于生产排程的问题,如何写SQL,有什么方法
根据每台机器每天的产能,自动编排机器生产日期、次序、数量,如下:

declare @t table(Machine char(1) ,d datetime,Minutes int,UsedMinute int)
insert into @t --两种设备A、B
select 'A','2009-06-29',600,100  union all  --6月29號總時間600,已經佔用100
select 'A','2009-06-30',600,null union all
select 'A','2009-07-01',600,0  union all
select 'A','2009-07-02',400,null union all
select 'A','2009-07-03',600,null union all
select 'A','2009-07-04',700,null union all
select 'B','2009-06-29',600,null union all
select 'B','2009-06-30',600,0 union all
select 'B','2009-07-01',600,null union all
select 'B','2009-07-02',400,null union all
select 'B','2009-07-03',600,null 

declare @v table(Item char(1),Machine char(1) ,d datetime,Minutes int)
insert into @v --物料K,需要用设备A、B.其中A从29号开始使用、B从01号开始使用
select 'K','A','2009-06-29',1500 union all
select 'M','A','2009-07-01',1000 

如何写SQL或者用什么方法达到以下效果:
item Machine    d   UsedMinute
K A 2009-06-29 00:00:00.000 500
K A 2009-06-30 00:00:00.000 600
K A 2009-07-01 00:00:00.000 400
M A 2009-07-01 00:00:00.000 200
M A 2009-07-02 00:00:00.000 400
M A 2009-07-03 00:00:00.000 400

------解决方案--------------------

SELECT  a.Item
      , a.[Machine]
      , b.d
      , [数量] = CASE WHEN b.sum_B < a.sum_A THEN b.sum_B
                    ELSE a.sum_A
               END - CASE WHEN b.sum_B - b.[Minutes] < a.sum_A - a.[Minutes] THEN a.sum_A - a.[Minutes]
                          ELSE b.sum_B - b.[Minutes]
                     END
FROM    (
          SELECT *, sum_A= (SELECT SUM ([Minutes]) FROM @v WHERE [Machine] = b.[Machine] AND d !> b.d) FROM @v b
        ) a
JOIN    (
          SELECT    *
                  , sum_B = (
                              SELECT SUM ([Minutes] - ISNULL (UsedMinute, 0)) FROM @t WHERE [Machine] = a.[Machine] AND [d] !> a.[d]
                            )
          FROM      @t a
        ) b
ON      a.[Machine] = b.[Machine]
        AND b.sum_B - b.[Minutes] < a.sum_A
        AND a.sum_A - a.[Minutes] < b.sum_B 

/*
Item d Minutes Machine 数量
K 2009-06-29 00:00:00.000 600 A 500
K 2009-06-30 00:00:00.000 600 A 600
K 2009-07-01 00:00:00.000 600 A 400
M 2009-07-01 00:00:00.000 600 A 200
M 2009-07-02 00:00:00.000 400 A 400
M 2009-07-03 00:00:00.000 600 A 400
*/
  相关解决方案