SQL-Oracle:使用公共键列/ s条件,使用另一个表中的值之和更新表列

时间:2015-10-06 21:07:44

标签: sql oracle merge

晚安Stackoverflow团队/成员

Oracle版本:11g版本11.1.0.6.0 - 64位生产

我有两个表:ORDERS和ITEMS。

ORDERS看起来像这样

ORDERS

ITEMS看起来像这样

enter image description here

表ORDERS有1个或多个Order_Number,每个Order_Number分配给至少一个或更多个库。 Total_Value列应该准确存储与订单号关联的商品值的总和。表ITEMS实际上通过parcel_code项目存储特定order_number / s的值。

我的数据库有一个错误,对于订单号分配多个库的订单(例如订单号1和4)没有正确存储实际总价值。

在我的情况下,我无法找出UPDATE语句,该语句将选择从表ITEMS获取总和并通过parcel_code链接它的订单号并更新表ORDERS中的列total_value。

我的更新结果应该回复:

对于表格订单我应该回来

订单号1: 对于两行总值1120

订单号4 对于两行总值:350

订单编号2和3,因为它们是单仓库订单保持不变: 50和20

伪代码:

更新ORDERS set total_value =(从ITEMS I,ORDERS O中选择sum(I.item_value),其中O.parcel_code = I.parcel_code)

我还会更新那些已分配的电子仓库的订单,因为它们将完全相同。

我正在查看MERGE语句或INNER选择查询。我面临的问题是我的更新必须是动态的。这意味着不是由值驱动,而是由列连接驱动,因为我可能必须创建一个每天更新它的进程。

有人可以帮助我吗?

1 个答案:

答案 0 :(得分:0)

您需要将项目和订单表连接在一起,然后选择所有item_values的总和,其中order_number等于您要更新的行(在表o1中)。

update 
Orders o1
set o1.total_value = (
    select sum(i.item_value) from Items i
    join Orders o2 on o2.parcel_code = i.parcel_code
    where o2.Order_number = o1.Order_number
)