首页 > 解决方案 > 根据条件和相同的主键将一个表中的金额带入另一个表

问题描述

我有一个更新语句,我想将一个表中的值带入另一个具有相同 PK 的表中。基本上我想AWARD从表中引入值AWARD并将其填充到TEST表中的AWARD列中TYPE = 'CON'。需要对 Date 列执行相同的操作。

Award表可以有多行,因此必须将奖励相加。我正在使用 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';

当前TEST表格数据:

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

Award桌子

 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

标签: sqloraclesql-updatesubquery

解决方案


您可以将两列设置为:

UPDATE TEST T
    SET (T.AWARD, T.DATE) = (SELECT SUM(A.AWARD), MAX(A.DATE)
                             FROM AWARD A
                             WHERE A.ID = T.ID
                            ) 
    WHERE TRIM(T.TYPE) = 'CON';

请注意GROUP BY,子查询中的 不是必需的。

注意我还更改了表别名,因此它们是表名的缩写,而不是无意义的单个字符。


推荐阅读