SQL Server: подсчитайте, сколько раз идентификатор из таблицы A встречается в таблице B - PullRequest
8 голосов
/ 30 января 2012

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

Есть ли способ сделать это, чтобы у вас было что-то вроде этого?

Product | Times sold
Milk    | 5
Bread   | 18
Cheese  | 0

... и т. Д.

Ответы [ 3 ]

22 голосов
/ 30 января 2012

Если вы просто наберете COUNT(*), то вы будете считать продукты, у которых нет заказов, как 1 ... вместо COUNT(o.OrderID), что будет считать только те записи, которые имеют ненулевое значение OrderID.

SELECT p.Product, COUNT(o.OrderID)
FROM
    Products p LEFT JOIN
    Orders o ON o.ProductID = p.ProductID
GROUP BY p.Product
0 голосов
/ 30 января 2012

@ Майкл прав.

Если у вас есть таблица заказов с подсчетом, она будет выглядеть так:

SELECT p.Product, SUM(ISNULL(o.ItemCount,0)) as [Count]
FROM
    Products p LEFT JOIN
    Orders o ON o.ProductID = p.ProductID
GROUP BY p.Product
0 голосов
/ 30 января 2012

Что-то вроде

Select Products.ProductName, Count(Orders.OrderID)
From Orders Inner join on Products Where Orders.ProductID = Products.ProductID
Group By Products.ProductName
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...