SQL-запрос LEFT JOIN

Хорошо... Я всегда борюсь с левыми соединениями по какой-то причине в SQL.

У меня простой запрос

SELECT COUNT(*) as OpenedToday, c.Product_Line, c.Product_Code
FROM SFCase as c
LEFT OUTER JOIN (SELECT DISTINCT Product_Code from SFCase) as p ON p.Product_Code = c.Product_Code
WHERE IsClosed = 'false'
AND DATEPART(YEAR, GETDATE()) = DATEPART(YEAR, CreatedDate)
AND DATEPART(MONTH, GETDATE()) = DATEPART(MONTH, CreatedDate)
AND DATEPART(DAY, GETDATE()) = DATEPART(DAY, CreatedDate)
GROUP BY c.Product_Line, c.Product_Code

То, что я ожидаю, это список всех Product_Code, с подсчетом, сколько случаев было OpenedToday (включая нулевые значения). Вместо этого я получаю только список тех кодов продуктов, для которых открыты дела сегодня (только положительные значения).

Когда я запускаю только DISTINCT Product_Code, я получаю 70 результатов. Однако, выполнив полный запрос, я получаю только 4 сегодня. Я хотел бы видеть все 70 результатов, наряду с нулями, если бы ни одно дело не было открыто сегодня.

Что я делаю не так с этим соединением?

Чарли

2 ответа

Решение

Пытаться:

SELECT SUM(CASE WHEN IsClosed='false' AND DATEDIFF(DAY, GETDATE(), CreatedDate)=0 
                THEN 1 ELSE 0 END) as OpenedToday, 
       Product_Line, Product_Code
FROM SFCase
GROUP BY Product_Line, Product_Code
SELECT  p.Product_Line, p.Product_Code,COUNT(*) as OpenedToday
FROM SFCase as c
RIGHT OUTER JOIN (SELECT DISTINCT Product_Code from SFCase) as p 
ON p.Product_Code = c.Product_Code
GROUP BY p.Product_Line, p.Product_Code
Другие вопросы по тегам