2013-03-15 23 views
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能有人帮忙吗?

回答

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

此外,在UPDATE查询的SELECT子查询中有两个WHERE子句。看起来像GROUP BY之后真的是HAVING子句。你不必这样做。

+0

非常感谢,我会去试试看,并回复给你 – Slarty 2013-03-15 10:40:41

+0

感谢伟大的答案,解决了我的问题。我认为查询应该读取的一个小问题是:UPDATE AVT a SET a.qty =(从inventory_part_in_stock_tab b中选择sum(b.qty),其中b.contract ='12505'AND a.part = b.part_no);我的错原来(没有“TABLE”) – Slarty 2013-03-15 11:36:39