Window 在 Oracle 的更新语句中运行 SQL
Window functions in an update statement in Oracle SQL
我正在使用 Oracle SQL DB 19c。
尝试了以下 Oracle SQL 脚本,但其中 none 可以使用 window 表达式向我的 table 添加一列。
第一个脚本运行到错误消息:“SQL 命令未正确结束”:
UPDATE TRANSACTION_HISTORY SET TRANSACTION_HISTORY.ID = X.RN
FROM
(SELECT SEQUENCE,
ROW_NUMBER() OVER (PARTITION BY TRANSACTION_DATE, TRANSACTION_PARTNER ORDER BY TRANSACTION_DATE, TRANSACTION_PARTNER ASC) AS RN
FROM TRANSACTION_HISTORY
) AS X
WHERE TRANSACTION_HISTORY.SEQUENCE = X.SEQUENCE
第二个运行到错误消息:“缺少 ON 关键字”但 ON 存在:
merge into TH USING
(SELECT TRANSACTION_DATE, TRANSACTION_PARTNER, SEQUENCE,
ROW_NUMBER() OVER (PARTITION BY TRANSACTION_DATE, TRANSACTION_PARTNER ORDER BY TRANSACTION_DATE, TRANSACTION_PARTNER ASC) AS RN
FROM TRANSACTION_HISTORY TH
) X
ON X.SEQUENCE = TH.SEQUENCE
WHEN MATCHED THEN UPDATE
SET TH.ID = X.RN
有人可以帮忙吗?
您需要在 ON
后加上括号,如下所示:
merge into TH USING
(SELECT SEQUENCE,
ROW_NUMBER() OVER (PARTITION BY TRANSACTION_DATE, TRANSACTION_PARTNER
ORDER BY TRANSACTION_DATE, TRANSACTION_PARTNER ASC) AS RN
FROM TRANSACTION_HISTORY TH
) X
ON (X.SEQUENCE = TH.SEQUENCE) -- you need to use parenthesis
WHEN MATCHED THEN UPDATE
SET TH.ID = X.RN
我正在使用 Oracle SQL DB 19c。 尝试了以下 Oracle SQL 脚本,但其中 none 可以使用 window 表达式向我的 table 添加一列。
第一个脚本运行到错误消息:“SQL 命令未正确结束”:
UPDATE TRANSACTION_HISTORY SET TRANSACTION_HISTORY.ID = X.RN
FROM
(SELECT SEQUENCE,
ROW_NUMBER() OVER (PARTITION BY TRANSACTION_DATE, TRANSACTION_PARTNER ORDER BY TRANSACTION_DATE, TRANSACTION_PARTNER ASC) AS RN
FROM TRANSACTION_HISTORY
) AS X
WHERE TRANSACTION_HISTORY.SEQUENCE = X.SEQUENCE
第二个运行到错误消息:“缺少 ON 关键字”但 ON 存在:
merge into TH USING
(SELECT TRANSACTION_DATE, TRANSACTION_PARTNER, SEQUENCE,
ROW_NUMBER() OVER (PARTITION BY TRANSACTION_DATE, TRANSACTION_PARTNER ORDER BY TRANSACTION_DATE, TRANSACTION_PARTNER ASC) AS RN
FROM TRANSACTION_HISTORY TH
) X
ON X.SEQUENCE = TH.SEQUENCE
WHEN MATCHED THEN UPDATE
SET TH.ID = X.RN
有人可以帮忙吗?
您需要在 ON
后加上括号,如下所示:
merge into TH USING
(SELECT SEQUENCE,
ROW_NUMBER() OVER (PARTITION BY TRANSACTION_DATE, TRANSACTION_PARTNER
ORDER BY TRANSACTION_DATE, TRANSACTION_PARTNER ASC) AS RN
FROM TRANSACTION_HISTORY TH
) X
ON (X.SEQUENCE = TH.SEQUENCE) -- you need to use parenthesis
WHEN MATCHED THEN UPDATE
SET TH.ID = X.RN