如何编写查询以联接三个表?

时间:2019-03-14 10:17:46

标签: sql-server join

我必须加入三个表:

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

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

最终表应包含具有唯一案例编号的行,以及案例数据表中的所有列, 指标表中每种情况的“已创建”列, 以及SLA表的“经过时间”和“剩余时间”列。

但是要删除重复项,我们必须仅从Metric和SLA表中选择一条记录。

针对每种情况选择此记录的标准是:

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

任务SLA表-为每种情况选择与“开始日期”的最大值相对应的“经过时间”和“剩余时间”的值。

我能够使用以下查询实现第一个联接(联接是使用SUBSTRING在Case Data和Metric表之间创建的,因为在Metric表的Case编号之前附加了'Case:'):

    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

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

1 个答案:

答案 0 :(得分:0)

使用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