2012-11-04 80 views
2

我已经搜索了所有的SQL问题,并且我发现了我不想要的每个版本 - 所以我需要问一下。我处在一个大脑锁定中 - 知道有一个数字,数字和组合,以及所有连接在一起。SQL计数通过分组加入

2表

  1. CustomerTable的 - 客户ID,CustQuality(值是良好的客户,糟糕的客户,新客户等)
  2. PurchaseTable(PurchID,PurchItem,PurchDate)

我我试图计算过去30天内好,坏,新客户的购买次数。

我曾尝试加入和组数等,我不断收到:

  • GoodCustomer - CustID2 - 1 PURCH
  • GoodCustomer - CustID3 - 3 PURCH
  • GoodCustomer - CustID4 - 2 PURCH
  • BadCustomer - CustID7 - 2 purch
  • BadCustomer - CustID1 - 4 purch
  • NewCustomer - CustID9 - 1 purch
  • NewCustomer - CustID4 - 4 PURCH等等等等

我只是想整体效果

  • 3信誉良好的客户取得6次购买
  • 2个不良客户的数据制作6次购买
  • 2新客户提出了5个Purcahses

然后为额外的功能...我有第三张表,我需要加入以及。 CustomerLocation

所以(CLID,CLLocation(北,南,东,西)的值),如果我想了解以下断裂组下来

  • 3信誉良好的客户取得6个采购 - 1个客户是北,2个客户提供从南
  • 2个不良客户的数据做6名购买 - 从东5客户,1西
  • 2新客户取得5个Purcahses - 南
  • 2客户

而且最后一个新的查询将... 哪里CLLocation =南

或者,如果我想按地区查找...

  • 1信誉良好的客户取得3个购买
  • 2不良客户的数据做2个购买
  • 0新客户取得0 Purcahses

我知道我问了很多 - 但是,任何及所有的帮助将非常感谢!

+0

你能指定表的外键约束? – rano

+0

CST.CustID - 主要客户,PCHT.PurchID - 主要用于购买,PCHT.PurchCustID - 外国客户,LCT.LCTID - 主要的位置,LCT.LCTCustID国外客户 –

回答

0
SELECT C.CustQuality, COUNT(DISTINCT c.CustID) AS tot_Customer, COUNT(PurchID) AS tot_Purch 
FROM CustomerTable C, PurchaseTable P 
WHERE C.CustID = P.PurchCustID 
GROUP BY C.CustQuality; 

SELECT C.CustQuality, CL.CLocation, COUNT(DISTINCT c.CustID) AS tot_Customer, COUNT(PurchID) AS tot_Purch 
FROM CustomerTable AS C, PurchaseTable AS P, CustomerLocation AS CL 
WHERE C.CustID = P.PurchCustID AND CL.LCTCustID = C.CustID 
GROUP BY C.CustQuality, CL.CLocation; 

SELECT C.CustQuality, CL.CLocation, COUNT(DISTINCT c.CustID) AS tot_Customer, COUNT(PurchID) AS tot_Purch 
FROM CustomerTable AS C, PurchaseTable AS P, CustomerLocation AS CL 
WHERE C.CustID = P.PurchCustID AND CL.LCTCustID = C.CustID AND CL.CLocation='North' 
GROUP BY C.CustQuality; 
+0

COUNT(DISTINCT c.CustID)一直向我抛出错误缺失操作符? –

+0

我只是想出了为什么......我通过SQL编写代码,但实际上使用访问测试模型。访问不“喜欢”不同。坏消息! –

+0

如果您可以尝试避免ACCESS:D – rano

0

这应该回答你的第一个问题

SELECT COUNT(DISTINCT c.CustID), CustQuality, COUNT(PurchID) FROM CustomerTable c 
INNER JOIN PurchaseTable p ON c.CustID = p.CustID 
GROUP BY CustQuality 
+0

感谢您的快速回复。我试着但它仍然在COUNT(DISTINCT c.CustID) –

+0

中出现“缺少操作员”,出现了一个错字,抱歉,*错了,它现在有效吗? –

+0

我看到并修复了原来的问题,但由于某种原因,我仍然得到了相同的错误COUNT(DISTINCT c.CustID)......让我疯狂!和上面的Rano一样。 –