Select 来自与名字或姓氏匹配的多个电子邮件的主要电子邮件
Select primary Email from multiple emails that match First or Last Name
我前面有一个非常有趣的要求。我想过使用游标,但我不确定我是否能得到我想要的。我有一个联系人 table,每条记录可能包含多个电子邮件,例如 FirstName、LastName、Email1、Email2、Email3、Email4。因此,要求是找到包含名字或姓氏的电子邮件,并选择该电子邮件作为他们的主要电子邮件。 SQL有什么优雅的写法吗?
ContactId FirstName LastName Email1 Email2 Email3
--------- --------- -------- --------- ------ ------
1 Jeremy Lin 1@yah.com linJ@gmail.com ty@mail.co
2 Sarah Woods ii@smiles.jp ube@mail.com SarahW@rou.com
3 Peter Wilkins wPeter@coors.au wsarah@yah.com null
预期结果:
ContactId FirstName LastName Email
--------- --------- -------- ---------
1 Jeremy Lin linJ@gmail.com
2 Sarah Woods SarahW@rou.com
3 Peter Wilkins wPeter@coors.au
我不会称它为优雅,但它并不复杂,当然也不需要游标:
select
ContactId, FirstName, LastName,
case
when (Email1 like '%'+FirstName+'%' or Email1 like '%'+LastName+'%') then Email1
when (Email2 like '%'+FirstName+'%' or Email2 like '%'+LastName+'%') then Email2
when (Email3 like '%'+FirstName+'%' or Email3 like '%'+LastName+'%') then Email3
else Email1 -- or whatever you want to use as the default
end as Email
from Contacts
以上假定您使用的是不区分大小写的排序规则。如果不是,则需要添加一些 upper()
或 lower()
调用。
我前面有一个非常有趣的要求。我想过使用游标,但我不确定我是否能得到我想要的。我有一个联系人 table,每条记录可能包含多个电子邮件,例如 FirstName、LastName、Email1、Email2、Email3、Email4。因此,要求是找到包含名字或姓氏的电子邮件,并选择该电子邮件作为他们的主要电子邮件。 SQL有什么优雅的写法吗?
ContactId FirstName LastName Email1 Email2 Email3
--------- --------- -------- --------- ------ ------
1 Jeremy Lin 1@yah.com linJ@gmail.com ty@mail.co
2 Sarah Woods ii@smiles.jp ube@mail.com SarahW@rou.com
3 Peter Wilkins wPeter@coors.au wsarah@yah.com null
预期结果:
ContactId FirstName LastName Email
--------- --------- -------- ---------
1 Jeremy Lin linJ@gmail.com
2 Sarah Woods SarahW@rou.com
3 Peter Wilkins wPeter@coors.au
我不会称它为优雅,但它并不复杂,当然也不需要游标:
select
ContactId, FirstName, LastName,
case
when (Email1 like '%'+FirstName+'%' or Email1 like '%'+LastName+'%') then Email1
when (Email2 like '%'+FirstName+'%' or Email2 like '%'+LastName+'%') then Email2
when (Email3 like '%'+FirstName+'%' or Email3 like '%'+LastName+'%') then Email3
else Email1 -- or whatever you want to use as the default
end as Email
from Contacts
以上假定您使用的是不区分大小写的排序规则。如果不是,则需要添加一些 upper()
或 lower()
调用。