2016-08-12 33 views
1

我知道我错过了一些明显的东西,但对我来说并不那么明显!无法通过内部连接访问CTE SQL Server

我有一个表值函数,它给出了一个开始,结束,间隔(thanks to another SO answer!)的日期的很好的时间间隔范围。

我已经有另一个TVF产生给定日期的最新零件交易。

但是,我能够在给定的开始日期和结束日期之间的一系列日期中产生最后的零件交易。所以,从三月到五月以及两天的时间间隔,我会在两者之间得到一个时间序列。

但是,我现在用CTE打了一堵墙,并试图避免进入程序/光标样式循环来执行此操作。

这是代码:

WITH datesTbl(DateValue) 
    AS (SELECT DateValue 
     FROM [dbo].[DateRange]('2016-03-18', '2016-04-27', 1)) 
SELECT * 
FROM datesTbl dr 
INNER JOIN dbo.MoveDateDiff(dr.Datevalue, DATEADD(day, 1, dr.DateValue), 14792) pm 
    ON DATEDIFF(Day, dr.dateValue, pm.MovementDate) <= 1; 

我知道我在底层TVF的但是在这里,我想找到一种方法,过去的事实,我似乎无法访问其他观念上的误区Inner Join语句的第一部分中的CTE(ON声明后没有语法错误!)。

任何指导将受到感谢!

回答

1

当您使用TVF,你想APPLY,不JOIN

WITH datesTbl(DateValue) as (
     SELECT DateValue 
     FROM [dbo].[DateRange]('2016-03-18', '2016-04-27', 1) 
    ) 
SELECT * 
FROM datesTbl dr CROSS APPLY 
    dbo.MoveDateDiff(dr.Datevalue, DATEADD(day, 1, dr.DateValue), 14792) pm 
WHERE DATEDIFF(Day, dr.dateValue, pm.MovementDate) <= 1; 
+1

灿烂,非常感谢戈登!这可能是我迄今在这里看到的最快回复:)。它也是一种享受。 –