好了,所以,它听起来就像你有一个查询发现,不使用存储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);
该查询将列出个人购买。如果你想只是客户端就可以省略从输出产品ID,STOREID和billingCode列,只是做
SELECT DISTINCT p1.clientID FROM ...
你能告诉我们你的代码吗? – Raptor 2013-05-06 06:48:58
以及您的桌子。这可能是你需要的一对夫妇或查询,也可能是一个简单的连接。 – Eddie 2013-05-06 11:03:10