我是一名新手,最近参与了一个项目,从我们业务的一个区域删除序列化(所以有问题的材料成为一个无差别的批量部分,而不是单独识别的项目。)
作为这个项目的一部分,我需要将part所持有的单位数量相加,然后用这个值更新一个表格。这是我的第一次尝试:
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可以有人帮忙吗?
答案 0 :(得分: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_no
和sum(b.qty)
- {{1} }。
此外,a.qty
WHERE
查询的SELECT
子查询中有两个UPDATE
子句。在HAVING
之后看起来真的是GROUP BY
子句。你不必这样做。