无法通过内部联接SQL Server访问CTE

时间:2016-08-12 10:07:35

标签: sql sql-server common-table-expression

我知道我错过了一些显而易见的事情,但这对我来说并不那么明显!

我有一个表值函数,它在给定开始,结束,间隔(thanks to another SO answer!)的情况下产生一个很好的间隔范围。

我是另一个TVF,它根据约会生成最新的部分交易。

但是,我之后能够在给定的开始和结束日期之间的一系列日期中生成最后一部分交易。因此,考虑到3月到5月以及间隔2天,我会在两者之间得到一种时间序列。

但是,我现在用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 个答案:

答案 0 :(得分: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;