首页 > 解决方案 > 如何编写查询以连接三个表?

问题描述

我必须加入三个表:

案例数据表 - 每个案例编号有一个唯一的行 度量表 - 一个案例编号可能有多行 任务 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-serverjoin

解决方案


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

推荐阅读