Хорошо ... Я всегда боюсь с LEFT JOINS по какой-то причине в SQL.SQL-запрос LEFT JOIN
У меня есть простой запрос,
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 (включая нулевые значения). Вместо этого я получаю только список тех кодов продуктов, которые открылись сегодня (только положительные значения).
Когда я запускаю только продукт DISTICT Product_Code, я получаю 70 результатов. Однако, выполняя полный запрос, я получаю только 4 сегодня. Я бы хотел увидеть все 70 результатов, а также нули, если бы ни один случай не был открыт сегодня.
Что я делаю неправильно с этим соединением?
Чарли
ли SFCase только держать дела открылась сегодня? Если нет, как вы расскажете, какие случаи были открыты сегодня - есть ли открытая_дата, например? У вас есть отдельная таблица для хранения всех продуктов? –
, что вы делаете, противоположно. use right external join – chetan
Mark - на самом деле, у моего реального запроса было немного больше ... Я попытался упростить его для форумов. Я обновил вопрос, чтобы показать полный запрос ... Я просто проверяю поле CreateDate, чтобы узнать, было ли оно открыто сегодня или нет. – Charlie74