2012-10-25 97 views
1

SQL似乎比我預期的要複雜。我的問題:爲每一個客戶,我想顯示客戶ID,並放置在2011年MS Access SQL查詢 - 顯示特定年份的訂單總數

我的表的訂單總數看起來像這樣

Table: Order_t 
Order_ID Order_Date Customer_ID 
-------- ---------- ----------- 
1001  10/21/2011 1 
1002  10/25/2011 8 
1003  10/26/2011 15 
1004  10/27/2011 5 
1005  11/24/2011 3 
1006  11/27/2011 2 
1007  11/28/2011 11 
1008  12/3/2011  12 
1009  12/5/2011  1 
1010   1/16/2012 4 

,我想我的查詢顯示錶像這樣:

Customer_ID Orders_Placed 
----------- ------------- 
1    2 
2    1 
3    1 
5    1 
8    1 
11    1 
12    1 
15    1 

我當前的查詢是這樣的(我目前完全忽略了日期部分,因爲我還沒有想出分組尚未:

SELECT Customer_ID, SUM(Order_ID) AS Orders_Placed 
FROM Order_t 
GROUP BY Order_ID, Customer_ID 

這是我顯然是錯誤的查詢:

Customer_ID Orders_Placed 
----------- ------------- 
1    1001 
8    1002 
15    1003 
5    1004 
3    1005 
2    1006 
11    1007 
12    1008 
1    1009 
4    1010 

感謝您的幫助,但我也想明白問題出在哪裏,我的邏輯。我似乎不瞭解什麼關鍵部分?

回答

1

用你的邏輯問題是這樣的

GROUP BY Order_ID, Customer_ID 

這意味着(Order_ID上,CUSTOMER_ID)的每個組合被放在不同的組。由於Order_ID是唯一的,因此幾乎沒有任何分組正在發生。

要正確做到這一點,您需要將GROUP BY的Customer_ID(它看起來像你所需要的,不是它),然後COUNT的訂單。最後,添加日期過濾器。

SELECT Customer_ID, COUNT(Order_ID) AS Orders_Placed 
FROM Order_t 
WHERE Order_Date >= #1/1/2011# and Order_Date < #1/1/2012# 
GROUP BY Customer_ID 
+0

你先生是我的英雄今晚。謝謝。我不知道這很簡單。謝謝! – mmenschig

0

使用count()代替

SELECT Customer_ID, COUNT(Order_ID) AS Orders_Placed 
FROM Order_t 
GROUP BY Customer_ID