2015-12-03 66 views
2

我在Access,Customer和Transaction上有兩個表。我試圖找到按狗排序的總交易量(0-3)。交易表中每個物品都有一條線,因此一條TransactionID可以有多條線。與兩個表的不同計數

這是我到目前爲止有:

SELECT Customer.Dogs, COUNT(Transaction.TransactionID) AS TotTrans 
FROM Transaction, Customer 
WHERE Transaction.CustomerID = Customer.CustomerID 
GROUP BY Dogs 

我也得到

Dogs | TotTrans 
0 | 130104 
1 | 59132 
2 | 17811 
3 | 1401 

顯然,這對在該交易總錶行和狗#排序。但是,它計算交易表中的重複項(例如,有三行TransactionID = 2,因爲在該交易中客戶購買了3個項目,計數明顯包括額外的2行)。

當我嘗試做COUNT(DISTINCT Transaction.TransactionID)它不工作,並且該消息

「語法錯誤(缺少操作員)在查詢表達式 'COUNT(DISTINCT Transaction.TransactionID)'。

我環顧四周,但似乎無法找到解決方案,我認爲問題的一部分源於我選擇兩個屬性的事實

如果有人可以幫助解釋做什麼和背後的邏輯它,那將是太棒了!

+0

您使用的是什麼RDBMS? –

+0

訪問,對不起,將編輯。 – bov25

+0

請注意,順便提一下,隱式連接(在from子句中有兩個表)是一個不贊成的語法,建議切換到現代的顯式語法: 瞭解如何使用顯式連接語法。亞倫伯特蘭做了一些[**寫作**](http://sqlblog.com/blogs/aaron_bertrand/archive/2009/10/08/bad-habits-to-kick-using-old-style-joins.aspx)關於它 –

回答

2

你應該加入客戶列表中已經明顯-ED表(使用內查詢)

SELECT Customer.Dogs, COUNT(distinctTransactions.TransactionID) AS TotTrans 
FROM (select distinct TransactionID,CustomerID from Transaction) as 
distinctTransactions, Customer 
WHERE distinctTransactions.CustomerID = Customer.CustomerID 
GROUP BY Dogs 
+0

謝謝,這工作。 – bov25

1

你應該學會使用正確的語法join。此外,表別名使查詢更易於編寫和讀取:

SELECT c.Dogs, COUNT(DISTINCT t.TransactionID) AS TotTrans 
FROM Transaction t JOIN 
    Customer c 
    ON t.CustomerID = c.CustomerID 
GROUP BY c.Dogs 
ORDER BY c.Dogs; 
+0

我剛剛開始,所以我會在本週末更多地加入「加入」,謝謝你指導我參加這個活動! – bov25

相關問題