Возвращать строки, если в запросе не найдено значений
У меня есть стол MyTable
который заполняется BizTalk от двух сторонних агентств (AGC1
а также AGC2
) каждый день. Я недавно столкнулся с проблемой, когда AGC2
отправил пустой файл, поэтому записи не обновляются.
Мне нужно выполнить запрос, как показано ниже, который вернет
AGC1 01/28/2016
AGC2 NULL
Но так как у меня нет записей для AGC2
Я только получаю
AGC1 01/28/2016
Как я могу получить AGC2 NULL
как в первом наборе результатов?
SELECT Agency, MAX(CONVERT(nvarchar(30), DATEENTERED, 101)), Case when MAX(CONVERT(nvarchar(30), DATEENTERED, 101)) = CONVERT(nvarchar(30), GETDATE(), 101) THEN 'True' ELSE 'False' end
FROM DBO.MYTABLE
GROUP BY AGENCY
2 ответа
Иметь другую таблицу, содержащую:
NameTable
Name
-----
AGC1
AGC2
Затем используйте этот запрос:
Select n.Name, max(m.dateentered)
from MyTable m right join NameTable n
on m.Agency = n.Name
group by n.Name
RIGHT JOIN
с таблицей, содержащей все агентства должны сделать свое дело. Эта версия использует производную таблицу с VALUES
:
SELECT
ag.Agency,
MAX(CONVERT(nvarchar(30), mt.DATEENTERED, 101)),
Case when MAX(CONVERT(nvarchar(30), mt.DATEENTERED, 101)) = CONVERT(nvarchar(30), GETDATE(), 101) THEN 'True' ELSE 'False' end
FROM
DBO.MYTABLE AS mt
RIGHT JOIN ( VALUES('AGC1'),('AGC2') ) AS ag(Agency) ON
ag.Agency=mt.Agency
GROUP BY
ag.AGENCY