2016-08-12 8 views
1

나는 명백한 것을 놓치고 있음을 알고 있지만 나에게 그렇게 명백하지 않다!내부 조인 SQL 서버를 통해 CTE에 액세스 할 수 없음

시작, 끝, 간격 (thanks to another SO answer!)이 주어진 좋은 간격 범위의 날짜를 생성하는 테이블 값 함수가 있습니다.

날짜가있는 최신 부품 거래를 생성하는 다른 TVF가 있습니다.

그러나 주어진 시작 날짜와 종료 날짜 사이에있는 일련의 날짜로 마지막 부분 트랜잭션을 생성 할 수있었습니다. 그래서, 3 월에서 5 월까지, 그리고 2 일간의 간격을두고, 나는이 두 가지 사이의 일종의 시계열을 얻을 것입니다.

그러나 저는 지금 CTE의 벽에 부딪 쳤고이를 위해 절차/커서 스타일 루핑을 피하려고했습니다. 내가 기본 TVF의 그러나 여기에 내가 액세스 할 수없는 것 사실 과거의 방법을 찾아 꿔 다른 개념 오류를했습니다 알고

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; 

:

코드입니다 내부 조인 문의 첫 번째 부분의 CTE (ON 선언 후에 구문 오류가 없습니다!).

모든 안내에 감사드립니다. 당신이 TVF를 사용하는 경우

답변

1

, 당신은 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

브릴리언트, 대단히 고든 감사합니다! 그것은 제가 지금까지 본 가장 빠른 답장 일 것입니다 :). 그것은 역시 치료를했습니다. –