首页 > 解决方案 > SQL CASE WHEN 语句匹配两个列字段

问题描述

希望根据两列匹配返回一个值。但如果列不匹配,则返回默认值SubscriberKey

SELECT 
    CASE SubscriberKey 
        WHEN SubscriberKey != EmailAddress 
           THEN ls.SubscriberKey
          ELSE EmailAddress
    END,
    EmailAddress,
    CreatedDate
FROM 
    [_ListSubscribers]

原始数据示例:我想返回记录 0,因为SubscriberKey匹配EmailAddress,然后还返回 3 和 4。记录 1 不会被选中,因为它是重复的。

ID 订户密钥 电子邮件地址 创建日期 地位
0 email0@address.com email0@address.com 2018 年 8 月 21 日 积极的
1 email2@address.com email0@address.com 2018 年 5 月 21 日 积极的
2 email3@address.com email6@address.com 2018 年 8 月 21 日 积极的
3 email4@address.com email6@address.com 2018 年 5 月 21 日 积极的

标签: sqlswitch-statement

解决方案


这是您可以尝试的一种可能的解决方案。它适用于您的小样本和我尝试过的几个排列。我假设因为您的SubscriberKey列被称为键,所以它是唯一的。

select * from (
    select *,
        case when Lag(EmailAddress) over(order by id)=Emailaddress
            and lag(SubscriberKey) over(order by id)=EmailAddress 
        then 0 else 1 end valid
    from [_ListSubscribers]
)t
where valid=1

推荐阅读