好的,听起来您有一个查询来查找不使用 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 ...