根据条件和相同的主键将数量从一个表带到另一个表中

问题描述 投票:1回答:1

我有一条更新语句,我想在其中将具有相同PK的金额从一个表导入另一个表。基本上,我想从AWARD表中引入AWARD值,并仅在TYPE ='CON'的情况下在AWARD字段下的TEST表中填充它。需要对“日期”字段执行相同的操作。

奖励表可以有多行,因此必须将奖励加起来。我正在使用Oracle SQL Developer。非常感谢您的帮助!

 UPDATE TEST A SET A.AWARD = (SELECT SUM(B.AWARD) 
                         FROM AWARD B 
                         WHERE B.ID = A.ID  GROUP BY B.ID) WHERE TRIM(A.TYPE) = 'CON';

当前:

测试表

 ID     TYPE            AMOUNT          AWARD       DATE
7186    INSPECT     $942,164.81         
7186    CMP         $1,392,528.28       
7186    CON         $92,464,162.51      

奖励表

 ID        AWARD            DATE        
7186    $83,157,895.00    6/25/2007

期望:

 ID     TYPE            AMOUNT             AWARD            DATE
7186    INSPECT      $942,164.81        
7186    CMP         $1,392,528.28       
7186    CON        $92,464,162.51      $83,157,895.00    6/25/2007
sql oracle sql-update subquery
1个回答
0
投票

这是Oracle merge语法的好用例:

merge into test t
using (select id, sum(award) award, max(mydate) mydate from award group by id) a
on (a.id = t.id and t.type = 'CMP')
when matched then update set t.award = a.award, t.mydate = a.mydate

注意:

  • [您不知道当多条记录与id表中给定的award相匹配时要选择哪个日期,所以我使用了最新日期

  • [date是Oracle中的保留字-我在查询中将其重命名为mydate

Demo on DB Fiddle

ID | TYPE |金额|奖项|我的约会---: :------ | ----------:| -------:| :--------7186 |检查942164.81 |  | null7186 | CMP | 1392528.28 | 83157895 | 2007年6月25日7186 | CON | 92464162.51 |  | null
© www.soinside.com 2019 - 2024. All rights reserved.