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