2016-08-12 7 views
1

明らかに何かが分からないことは知っていますが、それほどわかりません!内部結合SQL Serverを経由してCTEにアクセスできない

私は、開始、終了、間隔(thanks to another SO answer!)が与えられた素晴らしい間隔の日付範囲を生成するテーブル値関数を持っています。

私は、日付が与えられた最新の部品取引を生成する別のTVFを持っています。

しかし、私は与えられた開始日と終了日の間にある一連の日付で最後の部分取引を作成できた後でした。だから、3月から5月にかけて、2日間と言いますと、私は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

あなたは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

ブリリアントは、非常に多くのゴードンをありがとうございました!それは私がここまで見た中で最も速い返答かもしれません:)。それはあまりにも治療を働いた。 –

関連する問題