语句匹配两个列字段时的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