2012-01-30 4 views
8

제품 및 주문이라는 두 개의 테이블이 있습니다. 주문은 ProductID를 통해 제품을 외래 키로 참조합니다. 나는 한 번만 판매되는 제품을 포함하여 각 제품이 몇 번 판매되었는지 알고 싶습니다. 왼쪽 조인을 사용하면 거의 작동 할 수 있지만 주문 테이블에 있는지 여부에 관계없이 모든 제품에 대해 하나의 행을 제공합니다.SQL Server : 테이블 A의 ID가 테이블 B에서 발생하는 횟수를 계산하십시오.

이렇게 할 수있는 방법이 있나요?

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

... 등등.

+2

이'LEFT JOIN'는'내부 조인 수 '대신. –

+2

'LEFT JOIN'은해야 할 일입니다. 특별히 "치즈"를 나열하고 싶다면 0시에 팔았을 때 – Lamak

+0

주문이없는 행을 원하지 않는다면 왜 그럴까요? 출력 "치즈 0"? – ean5533

답변

22

단지 COUNT(*) 일 경우 주문 번호가 1 ... 대신 COUNT(o.OrderID) 인 제품을 계산합니다.이 제품은 null이 아닌 OrderID 인 레코드 만 계산합니다.

Select Products.ProductName, Count(Orders.OrderID) 
From Orders Inner join on Products Where Orders.ProductID = Products.ProductID 
Group By Products.ProductName 
+0

이것이 현재 op가하고있는 것이라고 생각합니다. – Lamak

+1

제 생각에 그는'left join '을하고 있기 때문에'products' '명령 (orders) '이 없지만'count (*)'를하고 있기 때문에 0 대신 1을 표시합니다. –

+0

Ah! 나는 COUNT (ProductID) 대신 COUNT (*)를 사용하고 있다는 사실을 깨닫지 못하고 질의에 대해 눈이 멀어지기 시작했다. –

0

뭔가 올바른 것입니다.

당신이 카운트 주문 테이블이있는 경우 그 결과는 다음과 같습니다 당신이 어떤 주문을 가진 제품은 다음 변경 반환하지 않을 경우

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

@Michael 같은

SELECT p.Product, COUNT(o.OrderID) 
FROM 
    Products p LEFT JOIN 
    Orders o ON o.ProductID = p.ProductID 
GROUP BY p.Product 
관련 문제