TA   --ShelfNO是唯一的 
id       ShelfNO     AItem         Aqty         Adate         Atype     TotalQty            
1         s11        i951          200           2007-8-23     1           200 
2         s12        i951          200           2007-8-24     0           200 
3         s13        i951          200           2007-8-21     1           200
4         s15        i951          400           2007-8-28     0           400
5         s14        i951          320           2007-8-28     1           320
6         s91        i999          300           2007-8-20     0           300
7         s92        i999          600           2007-7-21     1           600
8         s93        i999          490           2007-7-22     1           490
9         s96        i999          1180          2007-7-19     1          1180
10        s97        i999          900           2007-7-18     1           900
11        s71        i977          200           2007-7-18     0           200
12        s72        i977          300           2007-7-19     1           300TB 
id   OutItem     OutQty     Bdate        ShelfNO  Quqty    Adate      Atype   unit
1       i951     300        2007-8-25                                          0
2       i951     900        2007-8-2      b19     900     2007-06-09   0       0
3       i951     700        2007-8-26                                         100
4       i999     800        2007-8-19                                          0
5       i999     1800       2007-8-19                                         300
6       i977     900        2007-8-17                                          0--- 
概述: 
TA   是库存产品表     item是产品编号,ShelfNO是货架编号,Aqty是现库存数量,  TotalQty 原库存总数量,   
TB   是要发货的货单表。#######>>>>现在新增加了一列 unit(单位数量) <<<<<######  
现在要实现的是   为TB里ShelfNO为空的记录到TA里找出对应的货架(ShelfNO)及在货架上取的数量(Qutqty)----供操作员搬运货物 
#####>>>>>现在新增加了以下两个要求。
(a),如果unti<>0的时候(当unti<>0的时候OutQty/unit 一定整除),TB到TA中 要以 unit的整数倍去取货,
如果某货架上所剩的数量(Aqty)小于unit时(即小于一单位)则跳过不取了,到下一货架上取).----例如TA中的第5行,因为是TB中的第3行去取,而这行的unit=100,所以在TA中的第5行上只取300。
(b) 这里的首要条件是OutQty - Aqty)>0 的情况才考虑以下三种情况,------注意这里的OutQty和Aqty都是动态变化的。
if  1000 =< TotalQty  and  (OutQty - Aqty)/ TotalQty <0.03     then    suggestAddQty= (OutQty - Aqty);--suggestAddQty是#Result中新增的一列
if  500=<TotalQty <1000 and  (OutQty - Aqty)/ TotalQty <0.02   then    suggestAddQty= (OutQty - Aqty);
if  500>=TotalQty and  (OutQty - Aqty)/ TotalQty <0.01         then    suggestAddQty= (OutQty - Aqty);
如果属于上面三种情况中的一种,则不再找下一个货架了,在 Quqty中就直接填写OutQty,在suggestAddQty中填充建议补充的数据即suggestAddQty=OutQty - Aqty)
 <<<<<<######找货架的原则如下: 
(1)  -14 = < TA.ADate - TB.BDate = <0  如果有多批记录满足,优先考虑Atype=1的记录,再取TA.ADate离TB.BDate近的记录   ------(情况(1)是最近2周内到架的) 
(2)  0 <TA.ADate-TB.BDate <5           如果有多批记录满足,优先考虑Atype=1的记录,再取TA.ADate离TB.BDate近的记录   ------(情况(2)是比出货日期晚5天到架的) 
(3)  TA.ADate - TB.BDate < -14         如果有多批记录满足,优先考虑Atype=1的记录,再取TA.ADate离TB.BDate近的记录   -----(情况(3)是早于2周到架的) 
以上条件依次优先考虑(即首先找满足条件(1)的记录,如果数量不够则找(2),如果还不够则找(3))。 ---- 
按照以上原则   TA表中被取货的记录,对应的Aqty要减去被取的数量; 
同时要生成一个临时表#tResult   -- 
生成的临时表中要包括TB中的所有记录,TB中原来TB.ShelfNO < > " "的就记录直接复制到#tResult中, TB.ShelfNO= " "的记录   就将查询出得到的货架信息及数量补上再insert到#tResult中, 
当TB.ShelfNO= " "   的要到多个货架上取货的时候,就生成多条记录。 TA表的库存不够就按以下方法处理: 
在#Result再加上一列,   BuGouQty   来记录最后库存不够的数量,-----如果数量不够时,要生成一条新的记录, 
这条新的记录   shelfNo   ,Adate   和Atype都为空,   BuGouQty就记录不够的数量。
--- 
请问如何得到这个#tResult表。 
上面的测试数据最后得到的#tResult表应该如下: 
#Result 
id   TBid  OutItem     OutQty   unit    Bdate     ShelfNO   Quqty     BuGouQty     Adate         Atype   suggestAddQty
1    1     i951         300     0    2007-8-25     s11      200                    2007-8-23     1         
2    1     i951         300     0    2007-8-25     s13      100                    2007-8-21     1         
3    2     i951         900     0    2007-8-2      b19      900                    2007-06-09    0 
4    3     i951         700     100  2007-8-26     s13      100                    2007-8-21     1 
5    3     i951         700     100  2007-8-26     s12      200                    2007-8-24     0 
6    3     i951         700     100  2007-8-26     s14      300                    2007-8-28     1 
7    3     i951         700     100  2007-8-26     s15      100                    2007-8-28     0 
8    4     i999         800     0    2007-8-19     s91      300                    2007-8-20     0 
9    4     i999         800     0    2007-8-19     s93      500                    2007-7-22     1           10
10   5     i999         1800    300  2007-8-19     s92      600                    2007-7-21     1
11   5     i999         1800    300  2007-8-19     s96      1200                   2007-7-19     1           20
12   6     i977         900     0    2007-8-17     s72      300                    2007-7-19     1 
13   6     i977         900     0    2007-8-17     s71      200                    2007-7-18     0 
14   6     i977         900     0    2007-8-17                        400         
         ---记录   11   就是新生成的   库存不够的记录。(至于#Result中1--10行中的BuGouQty填充0也可以,为空也可以) 

解决方案 »

  1.   

    TA   --ShelfNO是唯一的  
    id       ShelfNO     AItem         Aqty         Adate         Atype     TotalQty             
    1         s11        i951          200           2007-8-23     1           200  
    2         s12        i951          200           2007-8-24     0           200  
    3         s13        i951          200           2007-8-21     1           200 
    4         s15        i951          400           2007-8-28     0           400 
    5         s14        i951          320           2007-8-28     1           320 
    6         s91        i999          300           2007-8-20     0           300 
    7         s92        i999          600           2007-7-21     1           600 
    8         s93        i999          490           2007-7-22     1           490 
    9         s96        i999          1180          2007-7-19     1          1180 
    10        s97        i999          900           2007-7-18     1           900 
    11        s71        i977          200           2007-7-18     0           200 
    12        s72        i977          300           2007-7-19     1           300 
    TB  
    id   OutItem     OutQty     Bdate        ShelfNO  Quqty    Adate      Atype   unit 
    1       i951     300        2007-8-25                                          0 
    2       i951     900        2007-8-2      b19     900     2007-06-09   0       0 
    3       i951     700        2007-8-26                                         100 
    4       i999     800        2007-8-19                                          0 
    5       i999     1800       2007-8-19                                         300 
    6       i977     900        2007-8-17                                          0 ---  
    概述:  
    TA   是库存产品表     item是产品编号,ShelfNO是货架编号,Aqty是现库存数量,  TotalQty 原库存总数量,    
    TB   是要发货的货单表。####### > > > >现在新增加了一列 unit(单位数量)  < < < < <######   
    现在要实现的是   为TB里ShelfNO为空的记录到TA里找出对应的货架(ShelfNO)及在货架上取的数量(Qutqty)----供操作员搬运货物  
    ##### > > > > >现在新增加了以下两个要求。 
    (a),如果unti < >0的时候(当unti < >0的时候OutQty/unit 一定整除),TB到TA中 要以 unit的整数倍去取货, 
    如果某货架上所剩的数量(Aqty)小于unit时(即小于一单位)则跳过不取了,到下一货架上取).----例如TA中的第5行,因为是TB中的第3行去取,而这行的unit=100,所以在TA中的第5行上只取300。 
    (b) 这里的首要条件是OutQty - Aqty) >0 的情况才考虑以下三种情况,------注意这里的OutQty和Aqty都是动态变化的。 
    if  1000 = < TotalQty  and  (OutQty - Aqty)/ TotalQty  <0.03     then    suggestAddQty= (OutQty - Aqty);--suggestAddQty是#Result中新增的一列 
    if  500= <TotalQty  <1000 and  (OutQty - Aqty)/ TotalQty  <0.02   then    suggestAddQty= (OutQty - Aqty); 
    if  500 >=TotalQty and  (OutQty - Aqty)/ TotalQty  <0.01         then    suggestAddQty= (OutQty - Aqty); 
    如果属于上面三种情况中的一种,则不再找下一个货架了,在 Quqty中就直接填写OutQty,在suggestAddQty中填充建议补充的数据即suggestAddQty=OutQty - Aqty) 
      < < < < < <###### 找货架的原则如下:  
    (1)  -14 =  < TA.ADate - TB.BDate =  <0  如果有多批记录满足,优先考虑Atype=1的记录,再取TA.ADate离TB.BDate近的记录   ------(情况(1)是最近2周内到架的)  
    (2)  0  <TA.ADate-TB.BDate  <5           如果有多批记录满足,优先考虑Atype=1的记录,再取TA.ADate离TB.BDate近的记录   ------(情况(2)是比出货日期晚5天到架的)  
    (3)  TA.ADate - TB.BDate  < -14         如果有多批记录满足,优先考虑Atype=1的记录,再取TA.ADate离TB.BDate近的记录   -----(情况(3)是早于2周到架的)  
    以上条件依次优先考虑(即首先找满足条件(1)的记录,如果数量不够则找(2),如果还不够则找(3))。  ----  
    按照以上原则   TA表中被取货的记录,对应的Aqty要减去被取的数量;  
    同时要生成一个临时表#tResult   --  
    生成的临时表中要包括TB中的所有记录,TB中原来TB.ShelfNO  <  > " "的就记录直接复制到#tResult中,  TB.ShelfNO= " "的记录   就将查询出得到的货架信息及数量补上再insert到#tResult中,  
    当TB.ShelfNO= " "   的要到多个货架上取货的时候,就生成多条记录。  TA表的库存不够就按以下方法处理:  
    在#Result再加上一列,   BuGouQty   来记录最后库存不够的数量,-----如果数量不够时,要生成一条新的记录,  
    这条新的记录   shelfNo   ,Adate   和Atype都为空,   BuGouQty就记录不够的数量。 
    ---  
    请问如何得到这个#tResult表。  
    上面的测试数据最后得到的#tResult表应该如下:  
    #Result  
    id   TBid  OutItem     OutQty   unit    Bdate     ShelfNO   Quqty     BuGouQty     Adate         Atype   suggestAddQty 
    1    1     i951         300     0    2007-8-25     s11      200                    2007-8-23     1          
    2    1     i951         300     0    2007-8-25     s13      100                    2007-8-21     1          
    3    2     i951         900     0    2007-8-2      b19      900                    2007-06-09    0  
    4    3     i951         700     100  2007-8-26     s13      100                    2007-8-21     1  
    5    3     i951         700     100  2007-8-26     s12      200                    2007-8-24     0  
    6    3     i951         700     100  2007-8-26     s14      300                    2007-8-28     1  
    7    3     i951         700     100  2007-8-26     s15      100                    2007-8-28     0  
    8    4     i999         800     0    2007-8-19     s91      300                    2007-8-20     0  
    9    4     i999         800     0    2007-8-19     s93      500                    2007-7-22     1           10 
    10   5     i999         1800    300  2007-8-19     s92      600                    2007-7-21     1 
    11   5     i999         1800    300  2007-8-19     s96      1200                   2007-7-19     1           20 
    12   6     i977         900     0    2007-8-17     s72      300                    2007-7-19     1  
    13   6     i977         900     0    2007-8-17     s71      200                    2007-7-18     0  
    14   6     i977         900     0    2007-8-17                        400          
              ---记录   11   就是新生成的   库存不够的记录。(至于#Result中1--10行中的BuGouQty填充0也可以,为空也可以) 
      

  2.   

    TA   --ShelfNO是唯一的  
    id       ShelfNO     AItem         Aqty         Adate         Atype     TotalQty             
    1         s11        i951          200           2007-8-23     1           200  
    2         s12        i951          200           2007-8-24     0           200  
    3         s13        i951          200           2007-8-21     1           200 
    4         s15        i951          400           2007-8-28     0           400 
    5         s14        i951          320           2007-8-28     1           320 
    6         s91        i999          300           2007-8-20     0           300 
    7         s92        i999          600           2007-7-21     1           600 
    8         s93        i999          490           2007-7-22     1           490 
    9         s96        i999          1180          2007-7-19     1          1180 
    10        s97        i999          900           2007-7-18     1           900 
    11        s71        i977          200           2007-7-18     0           200 
    12        s72        i977          300           2007-7-19     1           300 
    TB  
    id   OutItem     OutQty     Bdate        ShelfNO  Quqty    Adate      Atype   unit 
    1       i951     300        2007-8-25                                          0 
    2       i951     900        2007-8-2      b19     900     2007-06-09   0       0 
    3       i951     700        2007-8-26                                         100 
    4       i999     800        2007-8-19                                          0 
    5       i999     1800       2007-8-19                                         300 
    6       i977     900        2007-8-17                                          0 ---  
    概述:  
    TA   是库存产品表     item是产品编号,ShelfNO是货架编号,Aqty是现库存数量,  TotalQty 原库存总数量,    
    TB   是要发货的货单表。####### > > > >现在新增加了一列 unit(单位数量)  < < < < <######   
    现在要实现的是   为TB里ShelfNO为空的记录到TA里找出对应的货架(ShelfNO)及在货架上取的数量(Qutqty)----供操作员搬运货物  
    ##### > > > > >现在新增加了以下两个要求。 
    (a),如果unti < >0的时候(当unti < >0的时候OutQty/unit 一定整除),TB到TA中 要以 unit的整数倍去取货, 
    如果某货架上所剩的数量(Aqty)小于unit时(即小于一单位)则跳过不取了,到下一货架上取).----例如TA中的第5行,因为是TB中的第3行去取,而这行的unit=100,所以在TA中的第5行上只取300。 
    (b) 这里的首要条件是OutQty - Aqty) >0 的情况才考虑以下三种情况,------注意这里的OutQty和Aqty都是动态变化的。 
    if  1000 = < TotalQty  and  (OutQty - Aqty)/ TotalQty  <0.03     then    suggestAddQty= (OutQty - Aqty);--suggestAddQty是#Result中新增的一列 
    if  500= <TotalQty  <1000 and  (OutQty - Aqty)/ TotalQty  <0.02   then    suggestAddQty= (OutQty - Aqty); 
    if  500 >=TotalQty and  (OutQty - Aqty)/ TotalQty  <0.01         then    suggestAddQty= (OutQty - Aqty); 
    如果属于上面三种情况中的一种,则不再找下一个货架了,在 Quqty中就直接填写OutQty,在suggestAddQty中填充建议补充的数据即suggestAddQty=OutQty - Aqty) 
      < < < < < <###### 找货架的原则如下:  
    (1)  -14 =  < TA.ADate - TB.BDate =  <0  如果有多批记录满足,优先考虑Atype=1的记录,再取TA.ADate离TB.BDate近的记录   ------(情况(1)是最近2周内到架的)  
    (2)  0  <TA.ADate-TB.BDate  <5           如果有多批记录满足,优先考虑Atype=1的记录,再取TA.ADate离TB.BDate近的记录   ------(情况(2)是比出货日期晚5天到架的)  
    (3)  TA.ADate - TB.BDate  < -14         如果有多批记录满足,优先考虑Atype=1的记录,再取TA.ADate离TB.BDate近的记录   -----(情况(3)是早于2周到架的)  
    以上条件依次优先考虑(即首先找满足条件(1)的记录,如果数量不够则找(2),如果还不够则找(3))。  ----  
    按照以上原则   TA表中被取货的记录,对应的Aqty要减去被取的数量;  
    同时要生成一个临时表#tResult   --  
    生成的临时表中要包括TB中的所有记录,TB中原来TB.ShelfNO  <  > " "的就记录直接复制到#tResult中,  TB.ShelfNO= " "的记录   就将查询出得到的货架信息及数量补上再insert到#tResult中,  
    当TB.ShelfNO= " "   的要到多个货架上取货的时候,就生成多条记录。  TA表的库存不够就按以下方法处理:  
    在#Result再加上一列,   BuGouQty   来记录最后库存不够的数量,-----如果数量不够时,要生成一条新的记录,  
    这条新的记录   shelfNo   ,Adate   和Atype都为空,   BuGouQty就记录不够的数量。 
    ---  
    请问如何得到这个#tResult表。  
    上面的测试数据最后得到的#tResult表应该如下:  
    #Result  
    id   TBid  OutItem     OutQty   unit    Bdate     ShelfNO   Quqty     BuGouQty     Adate         Atype   suggestAddQty 
    1    1     i951         300     0    2007-8-25     s11      200                    2007-8-23     1          
    2    1     i951         300     0    2007-8-25     s13      100                    2007-8-21     1          
    3    2     i951         900     0    2007-8-2      b19      900                    2007-06-09    0  
    4    3     i951         700     100  2007-8-26     s13      100                    2007-8-21     1  
    5    3     i951         700     100  2007-8-26     s12      200                    2007-8-24     0  
    6    3     i951         700     100  2007-8-26     s14      300                    2007-8-28     1  
    7    3     i951         700     100  2007-8-26     s15      100                    2007-8-28     0  
    8    4     i999         800     0    2007-8-19     s91      300                    2007-8-20     0  
    9    4     i999         800     0    2007-8-19     s93      500                    2007-7-22     1           10 
    10   5     i999         1800    300  2007-8-19     s92      600                    2007-7-21     1 
    11   5     i999         1800    300  2007-8-19     s96      1200                   2007-7-19     1           20 
    12   6     i977         900     0    2007-8-17     s72      300                    2007-7-19     1  
    13   6     i977         900     0    2007-8-17     s71      200                    2007-7-18     0  
    14   6     i977         900     0    2007-8-17                        400          
              ---记录   11   就是新生成的   库存不够的记录。(至于#Result中1--10行中的BuGouQty填充0也可以,为空也可以) 
      

  3.   

    TA   --ShelfNO是唯一的  
    id       ShelfNO     AItem         Aqty         Adate         Atype     TotalQty             
    1         s11        i951          200           2007-8-23     1           200  
    2         s12        i951          200           2007-8-24     0           200  
    3         s13        i951          200           2007-8-21     1           200 
    4         s15        i951          400           2007-8-28     0           400 
    5         s14        i951          320           2007-8-28     1           320 
    6         s91        i999          300           2007-8-20     0           300 
    7         s92        i999          600           2007-7-21     1           600 
    8         s93        i999          490           2007-7-22     1           490 
    9         s96        i999          1180          2007-7-19     1          1180 
    10        s97        i999          900           2007-7-18     1           900 
    11        s71        i977          200           2007-7-18     0           200 
    12        s72        i977          300           2007-7-19     1           300 
    TB  
    id   OutItem     OutQty     Bdate        ShelfNO  Quqty    Adate      Atype   unit 
    1       i951     300        2007-8-25                                          0 
    2       i951     900        2007-8-2      b19     900     2007-06-09   0       0 
    3       i951     700        2007-8-26                                         100 
    4       i999     800        2007-8-19                                          0 
    5       i999     1800       2007-8-19                                         300 
    6       i977     900        2007-8-17                                          0 ---  
    概述:  
    TA   是库存产品表     item是产品编号,ShelfNO是货架编号,Aqty是现库存数量,  TotalQty 原库存总数量,    
    TB   是要发货的货单表。####### > > > >现在新增加了一列 unit(单位数量)  < < < < <######   
    现在要实现的是   为TB里ShelfNO为空的记录到TA里找出对应的货架(ShelfNO)及在货架上取的数量(Qutqty)----供操作员搬运货物  
    ##### > > > > >现在新增加了以下两个要求。 
    (a),如果unti < >0的时候(当unti < >0的时候OutQty/unit 一定整除),TB到TA中 要以 unit的整数倍去取货, 
    如果某货架上所剩的数量(Aqty)小于unit时(即小于一单位)则跳过不取了,到下一货架上取).----例如TA中的第5行,因为是TB中的第3行去取,而这行的unit=100,所以在TA中的第5行上只取300。 
    (b) 这里的首要条件是OutQty - Aqty) >0 的情况才考虑以下三种情况,------注意这里的OutQty和Aqty都是动态变化的。 
    if  1000 = < TotalQty  and  (OutQty - Aqty)/ TotalQty  <0.03     then    suggestAddQty= (OutQty - Aqty);--suggestAddQty是#Result中新增的一列 
    if  500= <TotalQty  <1000 and  (OutQty - Aqty)/ TotalQty  <0.02   then    suggestAddQty= (OutQty - Aqty); 
    if  500 >=TotalQty and  (OutQty - Aqty)/ TotalQty  <0.01         then    suggestAddQty= (OutQty - Aqty); 
    如果属于上面三种情况中的一种,则不再找下一个货架了,在 Quqty中就直接填写OutQty,在suggestAddQty中填充建议补充的数据即suggestAddQty=OutQty - Aqty) 
      < < < < < <###### 找货架的原则如下:  
    (1)  -14 =  < TA.ADate - TB.BDate =  <0  如果有多批记录满足,优先考虑Atype=1的记录,再取TA.ADate离TB.BDate近的记录   ------(情况(1)是最近2周内到架的)  
    (2)  0  <TA.ADate-TB.BDate  <5           如果有多批记录满足,优先考虑Atype=1的记录,再取TA.ADate离TB.BDate近的记录   ------(情况(2)是比出货日期晚5天到架的)  
    (3)  TA.ADate - TB.BDate  < -14         如果有多批记录满足,优先考虑Atype=1的记录,再取TA.ADate离TB.BDate近的记录   -----(情况(3)是早于2周到架的)  
    以上条件依次优先考虑(即首先找满足条件(1)的记录,如果数量不够则找(2),如果还不够则找(3))。  ----  
    按照以上原则   TA表中被取货的记录,对应的Aqty要减去被取的数量;  
    同时要生成一个临时表#tResult   --  
    生成的临时表中要包括TB中的所有记录,TB中原来TB.ShelfNO  <  > " "的就记录直接复制到#tResult中,  TB.ShelfNO= " "的记录   就将查询出得到的货架信息及数量补上再insert到#tResult中,  
    当TB.ShelfNO= " "   的要到多个货架上取货的时候,就生成多条记录。  TA表的库存不够就按以下方法处理:  
    在#Result再加上一列,   BuGouQty   来记录最后库存不够的数量,-----如果数量不够时,要生成一条新的记录,  
    这条新的记录   shelfNo   ,Adate   和Atype都为空,   BuGouQty就记录不够的数量。 
    ---  
    请问如何得到这个#tResult表。  
    上面的测试数据最后得到的#tResult表应该如下:  
    #Result  
    id   TBid  OutItem     OutQty   unit    Bdate     ShelfNO   Quqty     BuGouQty     Adate         Atype   suggestAddQty 
    1    1     i951         300     0    2007-8-25     s11      200                    2007-8-23     1          
    2    1     i951         300     0    2007-8-25     s13      100                    2007-8-21     1          
    3    2     i951         900     0    2007-8-2      b19      900                    2007-06-09    0  
    4    3     i951         700     100  2007-8-26     s13      100                    2007-8-21     1  
    5    3     i951         700     100  2007-8-26     s12      200                    2007-8-24     0  
    6    3     i951         700     100  2007-8-26     s14      300                    2007-8-28     1  
    7    3     i951         700     100  2007-8-26     s15      100                    2007-8-28     0  
    8    4     i999         800     0    2007-8-19     s91      300                    2007-8-20     0  
    9    4     i999         800     0    2007-8-19     s93      500                    2007-7-22     1           10 
    10   5     i999         1800    300  2007-8-19     s92      600                    2007-7-21     1 
    11   5     i999         1800    300  2007-8-19     s96      1200                   2007-7-19     1           20 
    12   6     i977         900     0    2007-8-17     s72      300                    2007-7-19     1  
    13   6     i977         900     0    2007-8-17     s71      200                    2007-7-18     0  
    14   6     i977         900     0    2007-8-17                        400          
              ---记录   11   就是新生成的   库存不够的记录。(至于#Result中1--10行中的BuGouQty填充0也可以,为空也可以)