MS Access SQL查询 - 显示特定年份的订单总数

时间:2012-10-25 01:04:15

标签: sql ms-access

SQL似乎比我预期的更复杂。我的问题:对于每个客户,我想显示2011年的客户ID和订单总数。

我的表格看起来像这样

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

我当前的查询是这个(我目前完全忽略了Date部分,因为我还没有想出分组:

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

感谢您的帮助,但我也想了解问题在于我的逻辑。我似乎不明白哪个关键部分?

2 个答案:

答案 0 :(得分:1)

你的逻辑问题是这个

GROUP BY Order_ID, Customer_ID

这意味着(Order_ID,Customer_ID)的每个组合都放在不同的GROUP中。由于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

答案 1 :(得分:0)

使用count()代替

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