Ale*_*r K 5 sql db2 select insert with-statement
我试图插入一个SELECT语句的结果使用WITH子句但得到语法错误.我是否遗漏了一些简单的内容,或者WITH子句不允许使用Insert语句?
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
Run Code Online (Sandbox Code Playgroud)
我得到一个错误,指出SELECT语句是预期的而不是INSERT.似乎无法欺骗DB2采取这种说法.我尝试将其重写为
INSERT INTO RETURNS (...) SELECT * FROM (WITH ...)
Run Code Online (Sandbox Code Playgroud)
仍然没有奏效.
任何建议将不胜感激.
我相信这种语法应该有效:
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;
Run Code Online (Sandbox Code Playgroud)
在DB2中,它with是.的一部分select.