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() 调用。