首页 > 解决方案 > 交叉应用的 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 

标签: sql

解决方案


这通常会使用以下方式编写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 ;

但是,如果您想提高性能,这些可能会非常相似。


推荐阅读