我尝试创建一个查询,将新记录插入到表中或更新已有的记录,但我仍然陷入过滤和分组以达到我想要的标准。
我有两个表: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;
到目前为止,我所做的任何事情都要复杂得多,所以任何帮助都会受到高度赞赏。对于长列名称感到抱歉,我没有选择它们。
答案 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
如果您发现意识形态存在任何缺陷,请告诉我们!