Проблема с запросом MS Access

Я пытаюсь подсчитать, сколько продуктов связано с каждой из наших покупательниц, чтобы использовать это в последующих расчетах.

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

Приведенный выше SQL дает мне список идентификаторов наших клиентов женского пола. Теперь, я думаю, в отдельном запросе мне нужно подсчитать количество идентификаторов продукта для каждого из идентификаторов в приведенном выше списке, но я не знаю, что делать дальше. Я не знаю, могу ли я объединить этот шаг в вышеуказанный запрос или мне нужно сделать что-то еще.

Я думаю, что мне нужно что-то вроде этого:

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

Может кто-нибудь помочь? Я на правильном пути?

Если вам нужна дополнительная информация, пожалуйста, дайте мне знать.


person jerry    schedule 16.08.2011    source источник
comment
В какой таблице находятся продукты? Таблица 1_ ?   -  person ypercubeᵀᴹ    schedule 16.08.2011
comment
GROUP BY [Customers].Customer_ID предполагает, что Customer_ID не является уникальным в таблице Customers. Это действительно так?   -  person onedaywhen    schedule 16.08.2011


Ответы (2)


Что-то типа:

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;

Обратите внимание, что приведенные выше запросы дадут вам количество заказов, а не количество продуктов, как вы описываете. Вам нужно будет предоставить структуру таблиц (возможно, Orders или OrderDetails, если у вас есть такая таблица), чтобы мы знали, где хранится информация о продуктах (и их заказах).



Примечание: поскольку (опять же, заслуживая более половины этих баллов :) @onedaywhen замечено, Customer_ID должно быть PRIMARY KEY таблицы [Customers]. Если это так (или если это UNIQUE), ваш исходный запрос можно упростить:

SELECT [Customers].Customer_ID
FROM [Customers]
WHERE [Customers].Gender = 'Female' ;
person ypercubeᵀᴹ    schedule 16.08.2011
comment
Для вашего предложения внешнего соединения предположительно COUNT(*) следует изменить на COUNT(Orders.Customer_ID), иначе клиент с нулевым заказом будет иметь тот же счет, что и клиент с одним заказом. - person onedaywhen; 16.08.2011

Попробуй это.

Не проверял, так как у меня нет 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);
person digi    schedule 16.08.2011