2016-01-28 83 views
1

我有一個表格MyTable,它由BizTalk從兩個外部代理(AGC1AGC2)每天填充。我最近碰到一個問題,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 

回答

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 
+0

都能跟得上我仍然只得到AGC1 NULL因爲AGC2不MYTABLE的。 –

+1

@LeeHopkins這工作正常。 http://sqlfiddle.com/#!3/a03317/2 –

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