TSQL Group Включая все столбцы - PullRequest
1 голос
/ 13 октября 2009

У меня есть запрос TSQL, который делает что-то вроде этого:

SELECT SUM(s.Amount) as TotalSales, p.ProductName
FROM SALES s 
INNER JOIN Product p ON s.ProductID = p.ID
GROUP BY p.ProductName

Результирующий вывод

TotalSales  Product
-----------------------
123.45      Apples
234.56      Oranges
345.67      Grapes

То, что я хотел бы сделать, это получить ВСЕ продукты в результатах, даже те, которые не имеют продаж. Я пытался выполнить LEFT JOIN на столе продуктов, но это просто сбивает с толку.

Так что я бы хотел, чтобы мой вывод был примерно таким.

TotalSales  Product
-----------------------
123.45      Apples
234.56      Oranges
345.67      Grapes
0.0         Lemons
0.0         Grapefruit

Есть идеи, как это сделать?

Ответы [ 3 ]

4 голосов
/ 13 октября 2009
SELECT SUM(ISNULL(s.Amount,0)) as TotalSales, p.ProductName
FROM SALES s 
RIGHT JOIN Product p ON s.ProductID = p.ID
GROUP BY p.ProductName
2 голосов
/ 13 октября 2009

с левым соединением (больше читаемости):

SELECT SUM(ISNULL(s.Amount,0)) as TotalSales, p.ProductName
FROM Product p 
LEFT JOIN SALES s ON p.ProductID = s.ID
GROUP BY p.ProductName
2 голосов
/ 13 октября 2009
SELECT COALESCE(SUM(s.Amount), 0) as TotalSales, p.ProductName
FROM Product p
LEFT JOIN SALES s ON s.ProductID = p.ID
GROUP BY p.ProductName
...