sql - 交叉应用的 SQL 替代方案
问题描述
我需要为右表中的每个匹配项从左表中引入所有记录。下面的示例查询。在下面的查询中的临时表#Dates_Test 中,我带来了过去 1 周的日期。对于员工中的每条记录,如果临时表中的日期(#Dates_Test)在 MvIn_DT 和 MvOut_Dt 之间,我必须返回 7 行。我可以使用 CROSS APPLY 实现预期的输出,我正在寻找 CROSS APPLY 以外的替代方案。提前致谢。
Dates_test 结果集:
预期输出:
询问:
SELECT c.Name
,c.ID
,COUNT(DISTINCT c.ID) AS [ID_Count]
,t2.DATE AS SvcDate
INTO #Test
FROM Employee c
CROSS APPLY (
SELECT [Date]
FROM #Dates_Test t
WHERE t.DATE BETWEEN c.MvIn_DT
AND c.MvOut_DT
) t2
WHERE c.[State] = 'NY'
GROUP BY t2.DATE
,c.ID
解决方案
这通常会使用以下方式编写JOIN
:
SELECT c.Name, c.ID,
COUNT(DISTINCT c.ID) AS [ID_Count],
t2.DATE AS SvcDate
INTO #Test
FROM Employee c JOIN
#Dates_Test t
ON t.DATE BETWEEN c.MvIn_DT AND c.MvOut_DT
WHERE c.[State] = 'NY'
GROUP BY t2.DATE, c.Name, c.ID ;
但是,如果您想提高性能,这些可能会非常相似。
推荐阅读
- api - 如何使用 GitHub GraphQL API 获取具有特定主题的所有存储库?
- java - 使布局适用于所有具有固定尺寸的 Android 设备
- javascript - 两种代码之间的区别 - 模块
- asp.net - ASP.NET 使用 iframe 进行 3ds - 如何返回到托管页面
- python - 更新 config.ini 时 IronPython 包“System.UnauthorizedAccessException”
- python - 自动确定绘图大小 matplotlib
- ruby-on-rails - 控制器“params”在测试环境和开发环境中表现不同
- c# - COM 端口在看似随机的时间变得忙碌
- node.js - 我在 Mongoose 中使用“创建”变得不确定
- vue.js - 从 vuex 和 Vue-native-websocket 插件接收 WebSockets 数据