在另一个查询中使用Access查询的结果。

时间:2013-05-06 06:48:04

标签: sql ms-access ms-access-2010

我在互联网上搜索了一个解决方案并绞尽脑汁想要解决这个问题,希望有人可以提供帮助。这是基本情况。

我在表格中有一个交易清单。每笔交易都有客户ID,商店ID,他们购买的产品和帐单代码(2,3,4,5,6,7)的字段

有些商店根本没有使用结算代码2,我想进一步调查。

我创建了一个不使用帐单代码的商店列表2.有20家商店。

然后我创建了一个查询,该查询为我提供了与这20家商店相关联的客户列表。

-------------------这就是我现在所处的位置-----------

基本上我想知道如果他们去商店X并购买产品Y,他们是否会在两个不同的商店中区别对待(帐单代码)。如果他们不使用账单代码2,那么商店有更多的钱,所以他们不鼓励使用这个代码。

有没有办法进行查询并告诉Access给我使用这20家商店和另一家商店(不是20家商店)的客户,他们是否在其他地方购买相同的产品?

任何帮助将不胜感激。我有一种感觉,我需要简化这个并采取多个步骤,但我似乎无法找到从A点到B点的路径。谢谢。

2 个答案:

答案 0 :(得分:1)

好的,所以听起来你有一个查询来查找不使用billingCode = 2的商店

SELECT DISTINCT storeID
FROM tblPurchases
WHERE storeID NOT IN (SELECT storeID FROM tblPurchases WHERE billingCode=2);

我已在Access中将该查询保存为[qryStoresNotUsing2],因此我可以在下面使用它。

听起来您还利用第一个查询来为您提供在这些商店购物的客户列表,这可以通过类似

的方式完成
SELECT DISTINCT clientID
FROM tblPurchases
WHERE storeID IN (SELECT storeID FROM qryStoresNotUsing2);

现在听起来您想了解一些在“非2”商店购买产品并在其他地方购买相同产品的客户的细节。

我们可以首先生成同一客户在不同商店购买相同产品的所有购买清单:

SELECT DISTINCT p1.clientID, p1.productID, 
        p1.storeID AS store1, p1.billingCode AS billingCode1, 
        p2.storeID AS store2, p2.billingCode AS billingCode2
FROM tblPurchases p1 INNER JOIN tblPurchases p2 
    ON p1.clientID=p2.clientID AND p1.productID=p2.productID AND p1.storeID<>p2.storeID

请注意,ON子句中的前两个条件确保客户端和产品相同,第三个条件确保存储不同。

另请注意,“不等于”自联接将产生多个对称结果:您将获得“Store_X,Store_Y”的行和“Store_Y,Store_X”的另一行。没关系,因为现在我们要做的是将这些结果限制为其中一个商店位于“非2”列表中的购买,所以我们只选择匹配的那些在连接的一侧(p1),只需在上面的查询中添加WHERE子句:

SELECT DISTINCT p1.clientID, p1.productID, 
        p1.storeID AS store1, p1.billingCode AS billingCode1, 
        p2.storeID AS store2, p2.billingCode AS billingCode2
FROM tblPurchases p1 INNER JOIN tblPurchases p2 
    ON p1.clientID=p2.clientID AND p1.productID=p2.productID AND p1.storeID<>p2.storeID
WHERE p1.storeID IN (SELECT storeID FROM qryStoresNotUsing2);

该查询将列出个人购买。如果您希望只是客户端,您可以从输出中省略productID,storeID和billingCode列,只需执行

SELECT DISTINCT p1.clientID FROM ...

答案 1 :(得分:0)

我会通过

解决问题

1 - 使用查询获取所有已使用结算代码2的商店结算的产品列表 - 仅包含产品代码,无其他信息

2 - 在步骤1中将交易表链接到查询并列出产品,客户,商店和帐单代码 - 可能在产品,客户和商店的交叉表查询中以及顶部的帐单代码

3 - 直观地扫描此输出以查看不使用帐单代码2的商店 - 这应该回答您的问题或告诉您是否需要进行更多调查

或者,您可以在步骤2中使用选择查询,并为帐单代码添加条件&lt;&gt; 2 - 由于您开始使用所有在任何地方使用代码2计费的产品,此查询将告诉您(商店,产品,客户)那些未使用代码2的商店,而另一家商店确实将代码2用于同一产品

另一种选择,如果必须是客户特定的 - 在查询1中,获取所有代码2账单代码的客户/产品组合。然后将其链接到客户和产品上的交易表,其条件为账单代码&lt;&gt; 2.这与上面的逻辑相同 - 但将列出(客户,产品)组合在一个商店中作为代码2计费,在另一个商店中作为一些其他帐单代码

所有这些都是简单的选择或交叉表查询,具有从第一个查询到第二个查询的连接。