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也可以,为空也可以) 

解决方案 »

  1.   


    在国庆前 我问过这个问题,而且已经有朋友帮忙解决了,现在又有新的要求,这里称其为高级版。
    这是原贴:http://topic.csdn.net/u/20070921/15/ebdcc24d-9418-4dfe-af65-cec4de28f3fa.html高级版 找货架的先后顺序原则跟原来的一样,现在就是新增加了 unit和suggestAddQty这两个要求,在面的#####>>>>>  <<<<<<######
    之间的就是新增的详细说明。
      

  2.   


    在国庆前 我问过这个问题,而且已经有朋友帮忙解决了,现在又有新的要求,这里称其为高级版。
    这是原贴:http://topic.csdn.net/u/20070921/15/ebdcc24d-9418-4dfe-af65-cec4de28f3fa.html高级版 找货架的先后顺序原则跟原来的一样,现在就是新增加了 unit和suggestAddQty这两个要求,在面的#####>>>>>  <<<<<<######
    之间的就是新增的详细说明。