Возвращать строки, если в запросе не найдено значений

У меня есть стол 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
Другие вопросы по тегам