oracle sum(表),Oracle SQL:使用另一个表的SUM查询更新列

我有两个表:

具有5列的表1(col1,col2,col3,col4,val1)和具有2列的表1的Table2(col1,col2,col3,col4,val2)。

1. Table1.val1不包含任何值。

2.对于表1和表2,col1,col2,col3和col4相同,并且它们是主键。

我想做的是,当Table1.col1 = Table2.col1和Table1.col2 = Table2.col2和Table1.col3 = Table2.col3和Table1.col4时,用sum(Table2.val2)更新Table1.val1。 = Table2.col4。

我做了类似的事情:

UPDATE Table1

SET val1 = (

SELECT t_sommevbrute.sumvalbrute FROM (

SELECT  col1,col2,col3,col4,SUM(val2) sumvalbrute

FROM Table2

WHERE col3 = 2014 AND col2=51

GROUP BY col1, col2, col3, col4) t_sommevbrute

WHERE Table1.col1 = t_sommevbrute.col1

AND Table1.col2 = t_sommevbrute.col2

AND Table1.col3 = t_sommevbrute.col3

AND Table1.col4 = t_sommevbrute.col4)

但是与此问题相关:Oracle SQL:用另一个表中的数据更新表,我应该有WHERE EXISTS子句。

任何帮助,请!

谢谢。

您可以按照以下方式进行:

使用临时表:-

首先创建温度表:

CREATE TABLE temp1 AS

SELECT  col1,col2,col3,col4,SUM(val2) AS sumvalbrute

FROM table2

WHERE col3 = 3 AND col2=2

GROUP BY col1, col2, col3, col4;

然后使用Temp表更新Main Table1:

UPDATE table1 SET table1.val1 = (SELECT temp1.sumvalbrute

FROM temp1

WHERE Table1.col1 = temp1.Col1

AND Table1.col2 = temp1.Col2

AND Table1.col3 = temp1.Col3

AND Table1.col4 = temp1.Col4);

SQL小提琴:-http://sqlfiddle.com/#!4/4864d/5

不使用临时表:-

UPDATE table1 SET table1.val1 = (SELECT temp1.sumvalbrute

FROM

(SELECT  col1,col2,col3,col4,SUM(val2) AS sumvalbrute

FROM table2

WHERE col3 = 3 AND col2=2

GROUP BY col1, col2, col3, col4) temp1

WHERE Table1.col1 = temp1.Col1

AND Table1.col2 = temp1.Col2

AND Table1.col3 = temp1.Col3

AND Table1.col4 = temp1.Col4);

SQL小提琴:-http://sqlfiddle.com/#!4/c9286/2

是的,但我不想创建临时表

然后尝试在Update Query中直接使用Select Query used temp表。

我没有创建表的权利,那么我必须找到创建任何其他表的解决方案

好的,我将不使用临时表来更新答案。

这正是我所做的!!

您可以尝试以下方法:

UPDATE t1 SET t1.val1 = SUM(t2.val2)

FROM table1

INNER JOIN table2 t2 ON t2.col1 = t1.col1

AND t2.col2 = t1.col2

AND t2.col3 = t1.col3

AND t2.col4 = t2.col4

您可以大大简化查询:

UPDATE Table1

SET val1 = (SELECT SUM(val2)

FROM Table2 t

WHERE Table1.col1 = t.col1 AND

Table1.col2 = t.col2 AND

Table1.col3 = t.col3 AND

Table1.col4 = t.col4

)

WHERE col3 = 2014 AND col2 = 51;

您可以使用where exists。 目的是在不匹配时防止NULL值。 但是,我认为将where子句拉到外部可能会解决此问题。 我注意到where子句使用的值与相关条件相同。

如您所见,我有一个group by子句。 由于表2中的行可能重复,所以我有组和总和。 你不这样认为吗?

@MDIT。 。 。 不可以。具有关联条件的sum()应该可以执行您想要的操作。

但是where子句" Where col3 = 2014 And col2 = 51"涉及table2

@MDIT。 。 。 由于存在相关条件,因此在任何一张表上都相同。

因为我仍然需要表2中没有在上面的表结构中显示的列名

@MDIT。 。 。 我不知道您的意思,但是您可以将where条件放回子查询中。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值