我有一条更新语句,我想在其中将具有相同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
这是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
ID | TYPE |金额|奖项|我的约会---: :------ | ----------:| -------:| :--------7186 |检查942164.81 | 空 | null7186 | CMP | 1392528.28 | 83157895 | 2007年6月25日7186 | CON | 92464162.51 | 空 | null