Redshift SQL 案例陈述和 WHERE 子句不起作用

Redshift SQL Case Statement and WHERE Clause not working

我正在 运行 下面的 SQL 脚本来创建一个 table,其中包含有关哪些营销活动促使人们访问我的网站填写表单的信息。

营销源邮票的案例陈述不起作用。我的结果仍然具有 marketing_source 列的 search-brand-whatever 值,而这些值现在应该只是 "google-adwords".

我还得到了创建日期为 2015 年 9 月 15 日以及之后我的过滤器明确指出创建日期 >= '1/1/2016' 的结果。

有什么想法吗?

create table temp.roi_inqs as (
Select 
a.ID,
cast(a.createddate as date) as date,
CASE
WHEN a.marketing_source_stamp__c = 'search%' then 'google-adwords'
ELSE a.marketing_source_stamp__c
END AS marketing_source,
CASE 
when a.contactid is null then b.email
when a.contactid is not null then c.email
end as prospect_email
from rjm_current.sf_campaignmember a
left join rjm_current.sf_lead b on b.id = a.leadid
left join rjm_current.sf_contact c on c.id = a.contactid
where cast(a.createddate as date) >= '1/1/2016'
AND (
campaign_marketing_type__c in ('A','C'))
OR
(campaign_marketing_type__c = 'B'
AND a.status in ('Registered','Attended','No Show')));

你的整个谓词的形式是

A AND B OR C

如果你不加任何括号,这意味着你正在查询

(A AND B) OR C

当你真的想写的时候

A AND (B OR C)

作为一般规则:如果您混合使用 ANDOR

,请务必加上括号

@Lukas Eder 回答了我关于日期问题的问题。

对于 case 语句,我不得不将 marketing_source_stamp__c = 'search%' 更改为 marketing_source_stamp__c LIKE 'search%' 并且该问题已解决。

CASE
WHEN a.marketing_source_stamp__c LIKE 'search%' then 'google-adwords'
ELSE a.marketing_source_stamp__c
END AS marketing_source,