sql-server - 在单独的列上连接
问题描述
我正在编写一个查询,它是更大数据提取查询的一部分。我坚持的部分最好解释如下:
表 1 (T1) 列
- 位置 ID
- 服务类别
表 3 (T3) 列
- 位置 ID
- 服务类别
- 服务类型
- 服务序列
- 服务状态
表 6 (T6) 列
- 位置 ID
- 服务类型
- 服务序列
- 服务费率
T1 是主表。T3 和 T1 使用 LocationID 和 ServiceCategory 连接。但是,这种组合在 T3 中可能存在重复项。因此,我正在使用:
LEFT JOIN(select distinct T3.LocationID,T3.ServiceCategory from Table3 where ServiceStatus in (2,3,4)) T3
ON T1.LocationID=T3.LocationID and T1.ServiceCategory=T3.ServiceCategory
当然,现在我没有 T3.ServiceType 来加入 Table6。当我最终进入 T3 和 T6 之间的连接时,我想保持 Table1 的记录数不变。我在进一步加入中使用 T6.ServiceRate 所以它对我的问题并不是特别重要。我基本上被表格的设计方式以及我需要如何创建连接所困扰。
我有一个次要问题,表 3 中的 ServiceCategory 由两种类型的 ServiceType 记录共享。在 LocationID 中,我只希望在我的SELECT语句中检索其中一个 ServiceCategory 记录。区别在于 ServiceType 是W或I。我使用LEFT JOIN的原因是因为并非所有 T1.LocationID / T1.ServiceCategory 记录都有匹配项,因此不可能进行INNER JOIN。
我正在寻求解决这些问题的帮助。如果需要,很高兴分享一些示例数据。
样本数据:
解决方案
不确定,如果我理解正确。你的意思是T3.ServiceType
可能是W
or I
?
也许,您可以添加一个构造not EXISTS
:
SELECT
*
FROM
T1
LEFT JOIN(select distinct T3.LocationID,T3.ServiceCategory,T3 from Table3 where ServiceStatus in (2,3,4)) T3
ON T1.LocationID=T3.LocationID and T1.ServiceCategory=T3.ServiceCategory
WHERE
(
T3.ServiceType = 'W'
OR NOT EXISTS (SELECT TOP 1 1 from Table3 T3n WHERE T3n.ServiceStatus in (2,3,4) and T1.LocationID=T3n.LocationID and T1.ServiceCategory=T3n.ServiceCategory and T3n.ServiceType <> T3.ServiceType)
)
推荐阅读
- python - 单元测试AWS python lambda全局变量补丁不起作用
- angular - Create a component to show input counter (Angular 8)
- python - 登录火花阶段/任务如何帮助理解它对应的实际火花转换
- python - 在“n”个减少后找到给定列表中唯一数字的最小(最少)个数
- security - 如何保护服务器上的数据加密密钥?
- javascript - File Object Not Defined NuxtJS AsyncData()
- python - 在会话结束之前从 tensorflow 张量中释放内存
- javascript - 从javascript中的模数字符串获取RSA密钥大小
- python - 如何在 Python 中重构 `with` 语句以使用 pandas 数据框?
- typescript - 无法在打字稿中键入动态键