无法通过内部连接访问 CTE SQL 服务器
Can't access CTE via inner join SQL Server
我知道我遗漏了一些明显的东西,但对我来说并不是那么明显!
我有一个 table 值函数,它在给定开始、结束、间隔 (thanks to another SO answer!) 的情况下生成一个很好的日期间隔范围。
我有另一个 TVF,它可以生成给定日期的最新零件交易。
但是,我能够在给定的开始日期和结束日期之间的一系列日期中生成最后一个零件交易。所以,给定 3 月到 5 月和一个间隔,比如 2 天,我会得到两者之间的一种时间序列。
但是,我现在遇到了 CTE 问题,我试图避免进入 procedural/cursor 样式循环来执行此操作。
这是代码:
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 中还有其他概念错误 但是在这里我想找到一种方法来克服我似乎无法访问 CTE 的事实Inner Join语句的第一部分(ON声明后没有语法错误!)。
不胜感激!
当您使用 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;
我知道我遗漏了一些明显的东西,但对我来说并不是那么明显!
我有一个 table 值函数,它在给定开始、结束、间隔 (thanks to another SO answer!) 的情况下生成一个很好的日期间隔范围。
我有另一个 TVF,它可以生成给定日期的最新零件交易。
但是,我能够在给定的开始日期和结束日期之间的一系列日期中生成最后一个零件交易。所以,给定 3 月到 5 月和一个间隔,比如 2 天,我会得到两者之间的一种时间序列。
但是,我现在遇到了 CTE 问题,我试图避免进入 procedural/cursor 样式循环来执行此操作。
这是代码:
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 中还有其他概念错误 但是在这里我想找到一种方法来克服我似乎无法访问 CTE 的事实Inner Join语句的第一部分(ON声明后没有语法错误!)。
不胜感激!
当您使用 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;