根据我的表映射,Company
可以有许多Contacts
。因此CompanyId
是Contact
表中的外键。
Contact
表的列ContactType
可以是MainContact
(值1),AccountsContact
(值2),EmailContact
(值3)等
我只是想编写一个SQL查询,该查询将根据以下条件的第一个EmailContact
(考虑最低的Contact
主键ID
)的条件返回所有不同的公司以及联系信息Company
,但如果没有电子邮件联系人,则“主要”联系人的信息
示例行
示例
|CompanyId | CompanyName|
1 ABC Ltd
2 XYZ Ltd
3 CCC Ltd
|ContactId | ContactType | EmailAddress | CompanyId
1 1 jay@gmail.com 1
2 3 jim@gmail.com 1
3 3 ray@gmail.com 2
4 3 bill@gmail.com 2
5 1 sally@gmail.com 3
预期查询结果
CompanyID | CompanyName | ContactId | ContactType | EmailAddress | CompanyId
1 ABC Ltd 2 3 jim@gmail.com 1 - This loaded EmailContact over MainContact
2 XYZ Ltd 3 3 ray@gmail.com 2 - This considered to load first EmailContact
3 CCC Ltd 5 1 sally@gmail.com 3 - This loaded MainContact as no EmailContacts at all
答案 0 :(得分:2)
也许您需要apply
:
select cm.*, cn.*
from Company cm outer apply
(select top (1) cn.*
from Contacts cn
where cn.CompanyID = cm.CompanyID
order by (case when cn.ContactType = 3 then 0
when cn.ContactType = 1 then 1
else 2
end)
) cn;