【问题标题】:How do I write a query to join three tables?如何编写查询以连接三个表?
【发布时间】:2019-03-14 10:17:46
【问题描述】:

我必须加入三个表:

案例数据表 - 每个案例编号都有一个唯一的行 度量表 - 一个案例编号可能有多行 任务 SLA 表 - 一个案例编号可能有多行

我必须以一种不会在最终表中复制任何行的方式加入这些行。

最终表格应包含具有唯一案例编号的行和案例数据表中的所有列, 度量表中每个案例的“已创建”列, 以及 SLA 表的“已用时间”和“剩余时间”列。

但要消除重复,我们必须从 Metric 和 SLA 表中只选择一条记录。

为每个案例选择此记录的标准是:

指标表 - 为每个案例选择“创建”日期的最小值。

任务 SLA 表 - 选择与每个案例的“开始日期”最大值相对应的“已用时间”和“剩余时间”的值。

我能够使用以下查询实现第一个连接(连接是使用 SUBSTRING 在案例数据和度量表之间创建的,因为在度量表中的案例编号之前附加了“案例:”):

    SELECT cd.Number, cd.Channel, cd.[State], cd.[Priority], cd.[Affected User], cd.Organization, 
    cd.Contact, cd.Client, cd.Product, cd.Category, cd.Subcategory, cd.[Ticket Summary], cd.[Case Type], 
    cd.[Case Aging], cd.Resolved, cd.Closed, cd.[Follow up], cd.Opened, cd.[Made SLA], cd.[SLA due], cd.[Schedule Follow Up],
    cd.[Resolution code], cd.[L2/L3 User], cd.Updated,

    Min(Created) AS 'First Response' FROM [dbo].[Support Dashboard Case Data] cd 

JOIN [dbo].[Metric Data] md ON cd.Number = SUBSTRING(md.ID,7,LEN(md.ID)) 

group by   cd.Number, cd.Channel, cd.[State], cd.[Priority], cd.[Affected User], cd.Organization, 
    cd.Contact, cd.Client, cd.Product, cd.Category, cd.Subcategory, cd.[Ticket Summary], cd.[Case Type], 
    cd.[Case Aging], cd.Resolved, cd.Closed, cd.[Follow up], cd.Opened, cd.[Made SLA], cd.[SLA due], cd.[Schedule Follow Up],
    cd.[Resolution code], cd.[L2/L3 User], cd.Updated

如何在此处合并第二个联接?

【问题讨论】:

    标签: sql-server join


    【解决方案1】:

    使用 row_number()

    select * from
    (
    SELECT cd.Number, cd.Channel, cd.[State], cd.[Priority], cd.[Affected User], cd.Organization, 
        cd.Contact, cd.Client, cd.Product, cd.Category, cd.Subcategory, cd.[Ticket Summary], cd.[Case Type], 
        cd.[Case Aging], cd.Resolved, cd.Closed, cd.[Follow up], cd.Opened, cd.[Made SLA], cd.[SLA due], cd.[Schedule Follow Up],
        cd.[Resolution code], cd.[L2/L3 User], cd.Updated,Created 'First Response',row_number() over(partition by cd.number order by created desc) as rn
    FROM [dbo].[Support Dashboard Case Data] cd 
    JOIN [dbo].[Metric Data] md ON cd.Number = SUBSTRING(md.ID,7,LEN(md.ID)) 
    )A where rn=1
    

    【讨论】:

    • 这是我创建第二个连接的方式吗?如果是,如何将其添加到第一个?
    猜你喜欢
    • 2015-08-03
    • 2016-10-16
    • 1970-01-01
    • 1970-01-01
    • 2021-12-19
    • 2014-07-27
    • 2012-05-02
    • 2015-09-23
    • 2013-07-13
    相关资源
    最近更新 更多