2016-01-28 2 views
1

J'ai une table MyTable qui est remplie par BizTalk à partir de deux agences externes (AGC1 et AGC2) chaque jour. J'ai récemment rencontré un problème où AGC2 a envoyé un fichier vide, donc aucun enregistrement n'est mis à jour.Retour ligne (s) lorsqu'aucune valeur n'est trouvée dans la requête

Je dois exécuter une requête comme ci-dessous, qui reviendrait

AGC1 01/28/2016 
AGC2 NULL 

Mais depuis que j'ai aucun enregistrement pour AGC2 j'obtenir seulement

AGC1 01/28/2016 

Comment puis-je obtenir AGC2 NULL comme dans le premier resultset?

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 

Répondre

1

Demandez à une table contenant:

NameTable

Name 
----- 
AGC1 
AGC2 

Ensuite, utilisez cette requête:

Select n.Name, max(m.dateentered) 
from MyTable m right join NameTable n 
on m.Agency = n.Name 
group by n.Name 
+0

Nope Je suis encore que NULL devient AGC1 parce AGC2 est pas du tout matable. –

+1

@LeeHopkins Cela fonctionne très bien. http://sqlfiddle.com/#!3/a03317/2 –

0

A RIGHT JOIN avec une table contenant toutes les agences devraient faire l'affaire. Cette version utilise une table dérivée avec 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