2016-11-05 2 views
0

외부 쿼리에 적용한 날짜 변수가 있지만 오류 메시지가 나타납니다. v_Date는 내부 쿼리에서 사용할 때 - 사용 된 컨텍스트에서 유효하지 않습니다.SQL DB2 날짜 변수를 내부 쿼리에 적용하는 방법은 무엇입니까?

내부 검색어의 2/3/2016 날짜를 시간 변수 v_Date로 바꿀 수 있습니까? WITH 행을 이동하거나 이중 결합을해야합니까?

WITH ttt as (select '3/31/2016' v_Date FROM SYSIBM.SYSDUMMY1) 

SELECT 
fpr.ID 
fpr.ID_PRICG_MTHDY, 
fpr.MARKET_DATE, 
fpr.PRICE_AMOUNT AS FIRST_PRICE, 
pr.PRICE_AMOUNT AS SECOND_PRICE, 
pr2.PRICE_AMOUNT AS THIRD_PRICE, 
thr.PRICE_DIFF AS TEST_1, 
thr.PRICE_DIFF2 AS TEST_2 
FROM PRICE_TABLE_1 fpr 

    LEFT JOIN PRICE_TABLE0 pr 
    ON fpr.ID = pr.ID AND pr.MARKET_DATE = '3/31/2016' AND pr.ROLE_TYPE = 'D' 
    LEFT JOIN PRICE_TABLE0 pr2 
    ON fpr.ID = pr2.ID and pr2.MARKET_DATE = '3/31/2016' AND pr2.ROLE_TYPE = 'P' 
    LEFT JOIN THRESHOLD_TEST_TABLE thr 
    ON fpr.ID_PRICG_MTHDY = thr.ID_PRICG_MTHDY 

JOIN ttt ON fpr.MARKET_DATE = v_Date 

WHERE fpr.DT_EXPTN = '1/1/9999' 
    AND fpr.MARKET_DATE = fpr.SELL_DATE 
    AND fpr.TYPE = 'F' 
    AND fpr.ID_PRICG_MTHDY IN (1, 3, 4, 7) 

답변

1

나는 FROM의 첫 번째 요소로 CTE로 시작하는 것입니다 그리고 당신은 어느 곳에서나 값을 사용할 수 있습니다 :

FROM ttt LEFT JOIN 
    PRICE_TABLE_1 fpr 
    ON fpr.MARKET_DATE = v_Date LEFT JOIN 
    PRICE_TABLE0 pr 
    ON fpr.ID = pr.ID AND pr.MARKET_DATE = ttt.v_date AND pr.ROLE_TYPE = 'D' LEFT JOIN 
    PRICE_TABLE0 pr2 
    ON fpr.ID = pr2.ID and pr2.MARKET_DATE = ttt.v_date AND pr2.ROLE_TYPE = 'P' LEFT JOIN 
    THRESHOLD_TEST_TABLE thr 
    ON fpr.ID_PRICG_MTHDY = thr.ID_PRICG_MTHDY 
+0

덕분에, 완벽하게 작동합니다. – steveW

관련 문제