Добавить значение из одной строки в другую с тем же первичным ключом - Oracle SQL - PullRequest
0 голосов
/ 28 февраля 2020

Я хотел бы создать оператор обновления, который добавляет значение из одной строки к значению другой строки с тем же полем идентификатора. В основном везде, где TYPE = 'ASB' и TEMP = 'DELETE', я хотел бы добавить значение AMOUNT к AMOUNT, где TYPE = 'CON'.

Это должно быть сделано для каждого идентификатора. Поле 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

Ответы [ 2 ]

1 голос
/ 28 февраля 2020

Вы можете использовать оператор 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;

Cheers !!

0 голосов
/ 28 февраля 2020

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