【问题标题】:How to update a table with the result of a group by如何使用分组结果更新表
【发布时间】:2013-03-15 09:23:22
【问题描述】:

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

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

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,有人可以帮忙吗?

【问题讨论】:

    标签: sql oracle sql-update


    【解决方案1】:

    正确代码:

    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 查询中的错误是您在 SELECTing 两列 - part_nosum(b.qty) 时只更新一列 - a.qty

    另外,UPDATE 查询的 SELECT 子查询中有两个 WHERE 子句。在GROUP BY 之后看起来确实是HAVING 子句。您不必这样做。

    【讨论】:

    • 非常感谢,我会去尝试一下并回复您
    • 感谢很好的答案,解决了我的问题。有一点我认为查询应该是:UPDATE AVT a SET a.qty = (Select sum(b.qty) from inventory_part_in_stock_tab b where b.contract = '12505' AND a.part = b.part_no);我的错(没有“表”)
    猜你喜欢
    • 2021-10-18
    • 1970-01-01
    • 2014-12-02
    • 2016-01-06
    • 1970-01-01
    • 1970-01-01
    • 2015-03-30
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多