2

我是一名新手,最近参与了一项从我们业务的一个领域中删除序列化的项目(因此,有问题的材料成为无差别的散装部件,而不是单独识别的物品)。

作为这个项目的一部分,我需要对部分持有的单位数量求和,然后用这个值更新一个表。这是我的第一次尝试:

UPDATE TABLE(AVT) a
SET a.qty = (Select part_no, sum(b.qty) from inventory_part_in_stock_tab b
where b.contract = '12505'
group by b.part_no
WHERE a.part_no = b.part_no);

我意识到这是完全不正确的,但希望能准确说明我正在尝试做的事情。我设法创建了一个基于光标的程序,我认为该程序可以实现我想要的,但实用性却很慢。

这会在屏幕上以列表形式生成正确答案,但不会更新文件!

Select part_no, sum(qty) from inventory_part_in_stock_tab
where contract = '12505'
group by part_no

我们正在运行 Oracle 9i 有人可以帮忙吗?

4

1 回答 1

2

正确代码:

UPDATE TABLE AVT a
SET a.qty = (Select sum(b.qty)
               from inventory_part_in_stock_tab b
              where b.contract = '12505'
                AND b.part_no = a.part_no);

UPDATE您的查询中的错误是您正在SELECT输入两列 -part_nosum(b.qty)当您只更新一列时 - a.qty

此外,您的查询子查询中有两个WHERE子句。看起来那确实是.之后的一个子句。你不必那样做。SELECTUPDATEHAVINGGROUP BY

于 2013-03-15T09:37:20.887 回答