2016-11-05 42 views
0

我有应用于外部查询的日期变量,但我收到一条错误消息:v_Date在使用它的上下文中无效 - 尝试在内部查询中使用它时。SQL DB2如何将日期变量应用于内部查询?

你能帮我用时间变量v_Date替换内部查询中的两个3/31/2016日期吗?我需要移动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

我将与CTE开始为FROM的第一个元素,那么你就可以在任何地方使用的值:

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