多标准插入/更新

时间:2016-01-18 18:50:49

标签: sql ms-access access-vba

我尝试创建一个查询,将新记录插入到表中或更新已有的记录,但我仍然陷入过滤和分组以达到我想要的标准。

我有两个表:tbl_PartInfo和dbo_CUST_BOOK_LINE。

我想根据CUST_ORDER_ID,CUST_ORDER_LINE_NO和REVISION_ID的组合从dbo_CUST_BOOK_LINE中进行选择。每个客户订单可以有多行,每行可以有多个版本。我尝试选择每个订单及其连接线的唯一组合,但是获取修订列中具有最高值的行的连接信息。

我想从dbo_CUST_BOOK_LINE插入/更新以下列:

CUST_ORDER_ID
PART_ID
USER_ORDER_QTY
UNIT_PRICE

我想将它们分别插入/更新为tbl_PartInfo,如以下列所示:

JobID
DrawingNumber
Quantity
UnitPrice

所以如果我在dbo_CUST_BOOK_LINE中有以下行(例如省略PART_ID)

CUST_ORDER_ID   CUST_ORDER_LINE_NO   REVISION_ID   USER_ORDER_QTY   UNIT_PRICE
    SCabc                1                1              0             100
    SCabc                1                2              4             150
    SCabc                1                3              4             125
    SCabc                2                3              2             200
    SCxyz                1                1              0             0
    SCxyz                1                2              3             50

它将返回

CUST_ORDER_ID   CUST_ORDER_LINE_NO   (REVISION_ID)   USER_ORDER_QTY   UNIT_PRICE
    SCabc                1                 3               4             125
    SCabc                2                 3               2             200
    SCxyz                1                 2               3             50    

但包含PART_ID且没有REVISION_ID

到目前为止,我的代码仅用于插入部分,因为我试图选择正确的记录,但我不断获得CUST_ORDER_ID和CUST_ORDER_LINE_NO的重复。

INSERT INTO tbl_PartInfo ( JobID, DrawingNumber, Quantity, UnitPrice, ProductFamily, ProductCategory )
SELECT dbo_CUST_BOOK_LINE.CUST_ORDER_ID, dbo_CUST_BOOK_LINE.PART_ID, dbo_CUST_BOOK_LINE.USER_ORDER_QTY, dbo_CUST_BOOK_LINE.UNIT_PRICE, dbo_CUST_BOOK_LINE.CUST_ORDER_LINE_NO, Max(dbo_CUST_BOOK_LINE.REVISION_ID) AS MaxOfREVISION_ID
FROM dbo_CUST_BOOK_LINE, tbl_PartInfo
GROUP BY dbo_CUST_BOOK_LINE.CUST_ORDER_ID, dbo_CUST_BOOK_LINE.PART_ID, dbo_CUST_BOOK_LINE.USER_ORDER_QTY, dbo_CUST_BOOK_LINE.UNIT_PRICE, dbo_CUST_BOOK_LINE.CUST_ORDER_LINE_NO;

到目前为止,我所做的任何事情都要复杂得多,所以任何帮助都会受到高度赞赏。对于长列名称感到抱歉,我没有选择它们。

1 个答案:

答案 0 :(得分:0)

我做了一些研究,并认为我找到了一种方法让它发挥作用,但我还在测试它。现在我使用了三个查询,但在完成时应该很容易简化为两个。

第一个是追加查询,它接受我希望从中获取不同组合的两个列并选择它们并使用" group by,"同时还选择最大修订列。它将它们附加到另一个我称之为tbl_TempDrop的表中。此表仅用于减少下一部分之前的结果数量。

第二个是更新查询,通过将条件设置为等于第一个查询中的三个选定列,更新tbl_TempDrop以包括我想要的所有其他列。当我有700,000条记录可供使用时,这花了很长时间才完成,因此使用了tbl_TempDrop。

第三个查询是一个基本的追加查询,它将tbl_TempDrop的行追加到最终目的地tbl_PartInfo。

剩下的就是连续三次运行。

我还不想包含任何表或查询的完整详细信息,直到我确保它按预期工作,并且因为我将使用此方法进行多个查询搜索,因为某些名称含糊不清。

这个网站对我有所帮助,以确保我有基本的想法。 http://www.techonthenet.com/access/queries/max_query2_2007.php

如果您发现意识形态存在任何缺陷,请告诉我们!