SQL Server 2005忽略case语句中的else

时间:2013-11-20 17:51:18

标签: sql sql-server-2005 exacttarget

我有一个SQL查询,用于生成退回电子邮件地址列表。我遇到的问题是,无论我做什么,当b.SubscriberKey为0或不存在时,我都不会回复任何内容。当b.SubscriberKey大于0时,此工作正常。

我认为它与在一个可能没有匹配行的表上进行连接有关,但我相信这会导致计数为0或null。当我更改我的查询以测试它时,我仍然一无所获。

编辑:我正在寻找字符串'No Bounces'以显示查询在我知道实际上没有发生跳出的那天运行。当前运行时,结果完全空白。

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

1 个答案:

答案 0 :(得分:1)

根据我的理解,您需要在您的结果中显示值为0或NULLS的Subscriberkeys,并且您还声明它可能没有该Join表中的记录。正如您自己所说,在这种情况下,最好的选择是LEFT Join而不是INNER JOIN

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