2016-08-12 66 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

燦爛,非常感謝戈登!這可能是我迄今在這裏看到的最快回復:)。它也是一種享受。 –