语句匹配两个列字段时的SQL CASE

语句匹配两个列字段时的SQL CASE,sql,switch-statement,Sql,Switch Statement,希望返回基于两列匹配的值。但是如果列不匹配,则返回默认的SubscriberKey SELECT CASE SubscriberKey WHEN SubscriberKey != EmailAddress THEN ls.SubscriberKey ELSE EmailAddress END, EmailAddress, CreatedDate FROM [_ListSubscribers]

希望返回基于两列匹配的值。但是如果列不匹配,则返回默认的
SubscriberKey

SELECT 
    CASE SubscriberKey 
        WHEN SubscriberKey != EmailAddress 
           THEN ls.SubscriberKey
          ELSE EmailAddress
    END,
    EmailAddress,
    CreatedDate
FROM 
    [_ListSubscribers]
原始数据示例:我想返回记录0,因为
SubscriberKey
电子邮件地址匹配,然后还返回3和4。记录1是重复的,因此不会被选择

身份证件 贝基 电子邮件地址 创建时间 地位 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日 积极的
这里有一个可能的解决方案,你可以试试。它适用于您的小样本和我尝试过的几个排列。我假设因为您的
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

显示一条记录,并表示要返回记录0和2。真让人困惑!出于某种原因,它不会让我把整个表格的例子。。。一直说我有一个错误,所以我不得不删除和添加。。。在这个示例中,我最多只能添加两个虚拟行:(那么,
where SubscriberKey=EmailAddress
有什么问题吗?好的,很抱歉,在发布这篇文章时遇到了问题,你们的回复很快:)抱歉,我更新了这篇文章。在试图让我的表示例显示时出现问题,因此必须删除语法才能进行验证。我还更新了我的请求。@Martin请参阅更新的答案
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