sql-server - 如何编写查询以连接三个表?
问题描述
我必须加入三个表:
案例数据表 - 每个案例编号有一个唯一的行 度量表 - 一个案例编号可能有多行 任务 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
如何在此处合并第二个联接?
解决方案
使用 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
推荐阅读
- javascript - 2种表达方式之间的区别,一种有传播,另一种没有传播?
- javascript - 在大型项目中使用 ReactJS 渲染 CSS 最快
- python - 在 python 中计算手头库存
- jestjs - 如何避免每次测试都启动 puppeteer?
- tensorflow - Tensorflow 2.0 版本与 scikit-learn 0.21 与 conda 冲突
- selenium - Selenium 代码:指定的 URL 未打开
- unit-testing - Mocha Chai vue 测试 vue 组件:this.$notify 不是函数
- java - 具有多个数据源的休眠配置类
- ios - 一个视图中的多个Alerts不能调用SwiftUI
- c# - OnActivityResult(Bluetooth) 中的 Intent 数据为空