我正在尝试将使用 WITH 子句但出现语法错误的 SELECT 语句的结果插入到表中。我是否遗漏了一些简单的东西,或者 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
我收到一条错误消息,指出需要 SELECT 语句而不是 INSERT。似乎无法欺骗 DB2 接受此声明。
我尝试将其重写为
INSERT INTO RETURNS (...) SELECT * FROM (WITH ...)
还是没用。
任何建议将不胜感激。
最佳答案
我相信这种语法应该有效:
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;
在 DB2 中,
with
是 select
的一部分.
关于sql - 从在 DB2 中使用 WITH 子句的 Select 查询插入故事,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27407895/