2011-08-16 152 views
0

我在努力计算有多少产品与我们每位女顾客相关联,以便我可以在以后的计算中使用它。MS Access查询问题

SELECT [Customers].Customer_ID 
FROM [Customers] 
WHERE ((([Customers].Gender)='Female')) 
GROUP BY [Customers].Customer_ID; 

上面的SQL让我对我们的女性顾客ID的列表。现在,我想在一个单独的查询中,我需要计算上面列表中每个ID的产品ID的数量,但我不知道从哪里去。我不知道是否可以将此步骤合并到上述查询中,或者如果我需要执行其他操作。

我想我需要的是这样的:

DCount("Order_ID", "Orders", "Customer_ID = [**how do I make it to where 
this equals the resulting Customer_ID's from the above query**]") 

是否有人可以帮忙吗?我在正确的轨道上吗?

如果您需要更多信息,请告诉我。

+0

哪个表有产品?表'订单'? –

+2

'GROUP BY [Customers] .Customer_ID'建议'Customer_ID'在'Customers'表中不唯一。这是真的吗? – onedaywhen

回答

4

喜欢的东西:

SELECT [Customers].Customer_ID 
    , COUNT(*) AS NumOrders 
FROM [Customers] 
    INNER JOIN [Orders] 
    ON [Orders].Customer_ID = [Customers].Customer_ID 
WHERE ([Customers].Gender = 'Female') 
GROUP BY [Customers].Customer_ID; 

INNER JOIN应改为LEFT JOIN包括客户没有任何订单(和COUNT(*)应改为COUNT(Orders.Customer_ID)为@onedaywhen看准):

SELECT [Customers].Customer_ID 
    , COUNT(Orders.Customer_ID) AS NumOrders 
FROM [Customers] 
    LEFT JOIN [Orders] 
    ON [Orders].Customer_ID = [Customers].Customer_ID 
WHERE ([Customers].Gender = 'Female') 
GROUP BY [Customers].Customer_ID; 

注意,即上面的查询会给你订单数量而不是产品的数量,如你所描述的。您必须提供表格的结构(如果您有这样的表格,可能需要提供OrdersOrderDetails),以便我们知道存储产品(及其订单)的信息的位置。



旁注:为(再次,值得比这些点:) @onedaywhen斑点的一半以上,在Customer_ID应该是表[Customers]PRIMARY KEY。如果是这样的话(或者如果它是UNIQUE),你原来的查询可以简化为:

SELECT [Customers].Customer_ID 
FROM [Customers] 
WHERE [Customers].Gender = 'Female' ; 
+2

对于你的外连接建议,大概'COUNT(*)'应该改为'COUNT(Orders.Customer_ID)',否则具有零订单的客户将与具有一个订单的客户具有相同的计数。 – onedaywhen

+0

@onedaywhen:对,thnx。 –

0

试试这个。

由于我没有在这台PC上获得MS Access,所以没有测试过。 类似的东西在MySQL和MS SQL工作,所以它可能会工作:)

SELECT SUM(O.Order_ID), C.Customer_ID 
FROM [Orders] AS O, [Customers] AS C 
WHERE C.Customer_ID IN (
SELECT [Customers].Customer_ID 
FROM [Customers] 
WHERE ((([Customers].Gender)='Female')) 
GROUP BY [Customers].Customer_ID); 
+0

你是对的。我的坏:)伯爵应该做的伎俩。 – digi