使用相同的主键将值从一行添加到另一行 - Oracle SQL
Posted
技术标签:
【中文标题】使用相同的主键将值从一行添加到另一行 - Oracle SQL【英文标题】:Add Value from one Row to another Row with Same Primary Key- Oracle SQL 【发布时间】:2020-02-28 15:45:40 【问题描述】:我想创建一个更新语句,将一行中的值添加到具有相同 ID 字段的另一行的值中。基本上只要 TYPE = 'ASB' 和 TEMP = 'DELETE' 我想将 AMOUNT 值添加到 TYPE = 'CON' 的 AMOUNT 中。
必须为每个 ID 执行此操作。 COMBINE 字段可以用作每一行的唯一标识符。也许是一个窗口功能?非常感谢任何帮助!
Current Result:
ID TYPE AMOUNT COMBINE TEMP
0432 CMP 12828.77 0432CMP
0432 CON -2083.26 0432CON
0432 ASB 1704.03 0430ASB DELETE
Expected Result:
ID TYPE AMOUNT COMBINE TEMP
0432 CMP 12828.77 0432CMP
0432 CON -379.23 0432CON
0432 ASB 1704.03 0432ASB DELETE
【问题讨论】:
【参考方案1】:您可以使用MERGE
声明如下:
MERGE INTO YOUR_TABLE TRG USING
(
SELECT ID, SUM(AMOUNT) AS AMOUNT
FROM YOUR_TABLE
WHERE TYPE = 'ASB' AND TEMP = 'DELETE'
GROUP BY ID
) SRC
ON ( SRC.ID = TRG.ID AND TRG.TYPE = 'CON' )
WHEN MATCHED THEN
UPDATE SET TRG.AMOUNT = TRG.AMOUNT + SRC.AMOUNT;
干杯!!
【讨论】:
【参考方案2】:update
应该这样做:
update t
set amount = amount +
(select coalesce(sum(t2.amount), 0)
from t t2
where t2.id = t.id and t2.type = 'ASB' and t2.temp = 'DELETE'
)
where t.type = 'CON' and
exists (select 1
from t t2
where t2.id = t.id and t2.type = 'ASB' and t2.temp = 'DELETE'
);
【讨论】:
以上是关于使用相同的主键将值从一行添加到另一行 - Oracle SQL的主要内容,如果未能解决你的问题,请参考以下文章
根据 postgresQL 中的时间戳将值从一个表映射到另一个表