2014-12-10 7 views
3

WITH 절을 사용하지만 구문 오류가 나타나는 SELECT 문의 결과를 테이블에 삽입하려고합니다. 단순한 무언가가 누락되었거나 WITH 절이 WITH 절에 허용되지 않습니까?DB2에서 WITH 절을 사용하는 Select 쿼리에서 이야기에 삽입

with 
    tser_indx as 
    (SELECT ROW_NUMBER() OVER (ORDER BY BUSDATE ASC) AS ROWID, ITEMID, BUSDATE, PRICE) 
    FROM prices_history where ITEMID = 12876), 

    VALS as 
    (select P1.ITEMID, P1.BUSDATE , P1.PRICE, P1.PRICE/P2.PRICE) as ret 
    FROM tser_indx p1, tser_indx p2 
    WHERE p1.rowid = p2.rowid + 1) 

INSERT INTO RETURNS (ITEMID, TRADEDATE, PRICE, RETURN) 
SELECT ITEMID, BUSDATE, PRICE, RET FROM VALS 

INSERT 대신 SELECT 문을 사용해야한다는 오류가 표시됩니다. DB2가이 성명서를 작성하는 것을 속일 수는 없습니다. 재 작성 시도 :

INSERT INTO RETURNS (...) SELECT * FROM (WITH ...) 

여전히 작동하지 않았습니다.

모든 의견을 환영합니다.

답변

7

나는이 구문이 작동한다고 생각 : DB2에서

INSERT INTO RETURNS (ITEMID, TRADEDATE, PRICE, RETURN) 
with 
    tser_indx as 
    (SELECT ROW_NUMBER() OVER (ORDER BY BUSDATE ASC) AS ROWID, ITEMID, BUSDATE, PRICE) 
    FROM prices_history where ITEMID = 12876 
    ), 
    VALS as 
    (select P1.ITEMID, P2.BUSDATE , P1.PRICE, P1.PRICE/P2.PRICE) as ret 
     FROM tser_indx p1, tser_indx p2 
     WHERE p1.rowid = p2.rowid + 1 
    ) 
SELECT ITEMID, BUSDATE, PRICE, RET FROM VALS; 

에서, withselect의 일부입니다.

+0

고든, 정말 고마워. 그것은 효과가있다! 어리석은 짓을해야한다는 것을 알고있었습니다. –