有2个table
table1 :
SKU  Batch   ExpectQty  Discrepency
A    123     3 
B    234     2
A    123     2
B    234     1
table2(table可以加field,我暂时加了一个Flag)
SKU  Batch   Qty  Flag
A    123     1    
A    123     1
A    123     1
A    123     1 
B    234     1
B    234     1table2中的Qty都是1,想实现,根据table1中的每一行记录,在table2中找到相同的SKU,Batch,累加其数量,凑够table1中的ExpectQty,如果不够,或者多了,就是discrepency数量,table2中累加过的记录,就不能再累加了。
注意,这两个表都没有key值,SKU和Batch都是可以重复的。就是累加table2的数量,凑够table1中的每一行,不够的,差异数就是discrepency如果可以用SQL直接实现,最好了,如果不行
想用VB实现可以将table1的变成
SKU  Batch   ExpectQty  Discrepency  注意 :这里的discrepency:
A    123     3          0                   3-(1+1+1)
B    234     2          0                   2-(1+1)
A    123     2          1                   2-(1)   :注意此时能累加的A,123只有1条了
B    234     1          1                   1-0     谢谢高手了
table可以增加field,如果有必要。
如果能用sql写出来更好,不过我用的是access数据库。所以可能不能写procedure.
要是能用VB实现,也很好了,总之,能写出来,就好了。提前谢了。

解决方案 »

  1.   

    用VB肯定是可以實現的
    用一SQL語句就得想想了
      

  2.   

    table2中的Qty都是1
    凑够table1中的ExpectQty,如果不够,或者多了,就是discrepency数量有點不明白
    說不夠還說得過去,多了是怎麼回事呢?
      

  3.   

    用循环吧:rs1.Open "Select * From table1", cnn, 1, 3
    rs2.CursorLocation = adUseClient
    Do Until rs1.EOF
      rs2.Open "Select Top " & Cstr(rs!ExpectQty) & " * From table2 Where SKU='" & rs!SKU & "' And Batch=" & rs1!Batch & " And Flg=False", cn, 1, 3
      Do Until rs2.EOF
        rs2!Flag = True
        rs2.Update
        rs2.MoveNext
      Loop
      rs1!Discrepency = rs1!ExpectQty - rs2.RecordCount
      rs1.Update
      rs1.MoveNext
      rs2.Close
    Loop
    rs1.Close
    Set rs1 = Nothing
    Set rs2 = Nothing
      

  4.   

    回答DengXingJie(杰西) 
    是对的,没有多了的情况,总之table2中的flag标示这个record是否已经被累计过了,flag没选的话,就是没用到的。
      

  5.   

    To off123 :
    我用的是ADODB.recorset
       rs2!Flag = True
        rs2.Update
        rs2.MoveNext
    这条不知道怎么写。
      

  6.   

    ADODB.recorset!Flag = True
    ADODB.recorset.Update
    ADODB.recorset.MoveNext