使用相同的主键将值从一行添加到另一行-Oracle SQL

问题描述 投票:0回答:2

我想创建一条更新语句,将一个行中的值添加到具有相同ID字段的另一行的值中。基本上无论TYPE ='ASB'和TEMP ='DELETE'哪里,我都想将AMOUNT值添加到TYPE ='CON'的AMOUNT上。

必须对每个ID进行此操作。 COMBINE字段可以用作每一行的唯一标识符。也许一个Windows功能?非常感谢您的帮助!

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
sql oracle sql-update primary-key
2个回答
0
投票

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'
                 );

0
投票

您可以如下使用MERGE语句:

MERGE INTO YOUR_TABLE TRG USING 
(
    SELECT ID, TYPE, SUM(AMOUNT) AS AMOUNT
    FROM YOUR_TABLE
    WHERE TYPE = 'ASB' AND TEMP = 'DELETE'
    GROUP BY ID, TYPE
) SRC 
ON ( SRC.ID = TRG.ID AND TRG.TYPE = 'CON' )
WHEN MATCHED THEN 
UPDATE SET TRG.AMOUNT = TRG.AMOUNT + SRC.AMOUNT;

干杯!

© www.soinside.com 2019 - 2024. All rights reserved.