2013-11-20 68 views
0

我有一个SQL查询运行以生成退回的电子邮件地址列表。我遇到的问题是,无论我做什么,当b.SubscriberKey为0或不存在时,我都不会收回任何东西。这在b.SubscriberKey大于0时工作正常。SQL Server 2005在case语句中忽略其他else

我认为这与在可能没有匹配行的表上进行连接有关,但我相信这会导致计数为0或null。当我改变我的查询来测试这个时,我仍然没有得到任何东西。

编辑:我正在寻找字符串'不弹跳'出现查询运行的一天,当我知道其实没有反弹发生。当前运行的结果是完全空白的。

Select 
    case 
     when count(b.SubscriberKey) is not null 
      then b.SubscriberKey 
      else 'No bounces' 
    end as SubscriberKey 
from 
    _bounce b 
Join 
    _Job j with (nolock) on j.JobID = b.JobID 
where 
    convert(date, b.EventDate) = convert(date, dateadd(dd, -1, getdate())) 
    and j.EmailID = 66653 
group by 
    b.SubscriberKey 
+0

你需要什么样的结果?你想要0或NULL的显示 – Santhosh

+0

嗨Santhosh,请参阅我上面的编辑。 – user448948

+0

请参阅下面的答案。 – Santhosh

回答

1

从我的理解,你需要值为0或NULLS也Subscriberkeys显示在你的结果,你也已经表示,它可能没有在注册表中的记录。正如你自己所说,在这种情况下,最好的选择是左加入,而不是内部加入

Select case when b.SubscriberKey is not null then b.SubscriberKey else 'No bounces' end as SubscriberKey 
from _Job j with (nolock) 
LEFT Join _bounce b 
on j.JobID = b.JobID 
where convert(date,b.EventDate)=convert(date,dateadd(dd,-1,getdate())) 
and j.EmailID = 66653 
group by b.SubscriberKey 
+0

嗨Santhosh,我重新运行它,但是当else语句应该执行时它仍然回到空白。我也尝试用0代替'not null'子句,问题依然存在。 – user448948

+0

你有没有0或NULL存在你的数据,你检查过吗?如果是五个样本记录,则列出CASE的结果并带有SUBSCRIBERKEY值 – Santhosh

+0

嗨Santhosh,没有任何0或NULL。例如,我在一天内运行查询,我知道没有反弹的电子邮件。如果我运行一个简单的查询来返回SubscriberKeys,我不会得到任何结果。当我对这个值进行计数时,它是0,并且应该触发我的else语句。 – user448948