用总和更新

时间:2016-01-18 10:36:39

标签: oracle sum sql-update

我有一个包含以下字段的表: ID,VALUES,VARIAB

我试图对字段VALUES进行求和,但需要按ID进行分组。 而Subselect不接受多行。 (当我只使用1个ID时,工作正常)。

BEGIN 
UPDATE TBL2
SET SOMA =
      (SELECT SUM(x.VALUES)
      FROM TBL3 x INNER JOIN TBL2 y
     ON y.ID = x.ID
  WHERE    y.ID = x.ID AND X.VARIAB = 1
GROUP BY x.ID
   );
END;

我正在使用ORACLE DB,如果有人评论这个病,那就非常感激。 对不起我的英文缺陷。

2 个答案:

答案 0 :(得分:2)

要一次更新多个记录和/或进行upsert,请使用MERGE语句,如下所示:

MERGE INTO TBL2 T2 USING (
    SELECT x.id,SUM(x.VALUES) total
    FROM TBL3 x 
    WHERE x.VARIAB = 1
    GROUP BY x.ID
) T3 ON (T2.ID = T3.ID)
WHEN MATCHED THEN UPDATE
SET T2.SOMA = T3.TOTAL

答案 1 :(得分:0)

问题是您的更新声明没有相关性 - 即。您的子查询没有引用正在更新的表。

您可以将其更改为:

update tbl2 t2
set soma = (select sum(t3.values)
            from   tbl3 t3
            where  t2.id = t3.id
            and    t3.variab = 1);