【问题标题】:SQL query to select columns from multiple tables with conditions on Group BySQL 查询从多个表中选择具有 Group By 条件的列
【发布时间】:2022-12-08 06:14:40
【问题描述】:

我有 3 个关系表:

表A:

Party_Number    Account_Number    Email_Code    Relation_Code
1111            A00071            null          B
1111            A00071            null          C
1111            A00071            null          D
1111            A00072            140           D
1111            A00073            140           C
1111            A00074            140           C
1111            A00075            null          B

表B:

Account_Number    Date
A00071            8/8/2020
A00072            null
A00073            null
A00074            null
A00075            null

表C:

Party_Number    Email
1111            abc@gmail.com

我需要连接 3 个表才能得到以下结果(仅记录“Relation_Code”为“C”或“D”的位置):

Party_Number    Account_Number    Email_Code    Relation_Code    Date       Email
    1111            A00071            null          C            8/8/2020   abc@gmail.com
    1111            A00071            null          D            8/8/2020   abc@gmail.com
    1111            A00072            140           D            null       abc@gmail.com
    1111            A00073            140           C            null       abc@gmail.com
    1111            A00074            140           C            null       abc@gmail.com

我写了这个查询来得到结果:

Select A.Party_Number, A.Account_Number, A.Relation_Code, A.Email_Code,
       B.Date, C.Email
       from TableA A, TableB B, TableC C
       Where A.Account_Number= B.Account_Number
       AND A.Party_Number = C.Party_Number
       AND A.Relation_Code in ('C','D')
 Order By A.Account_Number

但是可以有具有相同 Account_Number 但不同 Relation_Code('C' 和 'D')的行。例如 (A00071)。

如果有重复的 Account_Number,我只需要选择 Relation_Code 为“D”的 Account_Number。

如何编写 SQL 查询以连接多个表并按条件分组?

【问题讨论】:

    标签: sql-server join group-by


    【解决方案1】:

    使用标准联接!这有助于制定逻辑并将连接条件与其他过滤谓词分开。

    在这里,似乎从在列relation_code 上过滤的a 开始,您希望在bc 中允许“缺失”关系。我们会用 left joins 来表达它:

    select a.party_number, a.account_number, a.relation_code, a.email_code,
        b.date, c.email
    from tablea a
    left join tableb b on b.account_number = a.account_number
    left join tablec c on c.party_number   = a.party_number
    where a.relation_code in ('C','D')
    order by a.account_number
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2021-01-15
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-01-04
      • 2011-09-10
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多