2

私は初心者で、最近、私たちのビジネスの 1 つの領域からシリアル番号を削除するプロジェクトに関与するようになりました (そのため、問題の材料は個別に認識されるアイテムではなく、差別化されていないバルク部品になります)。

このプロジェクトの一環として、パーツごとに保持されているユニットの数量を合計し、この値でテーブルを更新する必要があります。これが私の最初の試みです:

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クエリの間違いは、 2つの列を使用していることですSELECT-part_noそしてsum(b.qty)、1つの列だけを更新している間- a.qty

また、クエリのサブクエリには2つのWHERE句があります。それは本当に。の後の節のように見えます。あなたはそれをする必要はありません。SELECTUPDATEHAVINGGROUP BY

于 2013-03-15T09:37:20.887 に答える