在查询中找不到值时返回行

时间:2016-01-28 21:07:48

标签: tsql null records

我有一个表MyTable,每天由来自两个外部代理商(AGC1AGC2)的BizTalk填充。我最近遇到了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 个答案:

答案 0 :(得分:1)

有另一张表格包含:

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

答案 1 :(得分:0)

带有包含所有代理商的表的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