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