从多个与姓氏或姓氏匹配的电子邮件中选择主电子邮件

时间:2016-05-30 20:25:57

标签: sql sql-server-2012 cursor

我前面有一个非常有趣的要求。我想过使用游标,但我不确定我能不能得到我想要的东西。我有一个联系人表,每个记录可能包含多个电子邮件,如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

1 个答案:

答案 0 :(得分:3)

我不会称之为优雅,但它并不复杂,当然也不需要游标:

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()来电。