代码之家  ›  专栏  ›  技术社区  ›  JibW

基于多条件的sql连接查询

  •  -1
  • JibW  · 技术社区  · 8 年前

    根据我的表映射 Company 可以有很多 Contacts 是的。所以 CompanyId 外键是否在 Contact 桌子。

    接触 表有一列 ContactType 可能是 MainContact (值1) AccountsContact (值2) EmailContact (值3)等。

    我只想编写一个sql查询,根据第一个条件返回所有不同的公司以及联系信息 电子邮件联系人 (考虑最低 接触 主键 ID )其中之一 单位 ,但如果没有电子邮件联系人,则“主要”联系人的信息

    示例行

    • 公司1信息->联系人信息(第一个“电子邮件联系人”,如果找不到“主要联系人”)
    • 公司2信息->联系人信息(第一个“电子邮件联系人”,如果找不到“主要联系人”)

    例子

    |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
    
    1 回复  |  直到 8 年前
        1
  •  2
  •   Yogesh Sharma    8 年前

    也许你需要 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;