2012-11-04 165 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一樣。 –