Как мне суммировать общее значение каждого столбца для отдельного ключа, а затем присвоить итоговое значение значению в другой таблице?

#sql #oracle

#sql #Oracle

Вопрос:

Я пытаюсь обновить столбец в одной таблице, чтобы он суммировал все значения в другой таблице, связанные с определенным ключом. Я не могу правильно использовать синтаксис и не могу найти ответ на эту проблему в Интернете.

Я пытался изменить место, где я помещаю «СУММУ», но это не сработает.

Вот код:

 UPDATE purchase_order
SET total = SUM(SELECT total FROM purchase_order_items
WHERE purchase_order_items.purchase_order_order_no = purchase_order.order_no));
  

Это должно привести к тому, что столбец «total» из таблицы purchase_order_order будет обновлен общей суммой столбца «total» из каждой записи в purchase_order_items, где ключ столбца order_no совпадает в обеих таблицах.

Ответ №1:

Вы должны использовать функцию SUM в подзапросе и присвоить результат основной таблице..

 UPDATE PURCHASE_ORDER
   SET TOTAL = (SELECT SUM(PURCHASE_ORDER_ITEMS.TOTAL)
                  FROM PURCHASE_ORDER_ITEMS
                 WHERE PURCHASE_ORDER_ITEMS.PURCHASE_ORDER_ORDER_NO =
                       PURCHASE_ORDER.ORDER_NO);
  

Ответ №2:

Вы могли бы использовать MERGE оператор:

 MERGE INTO purchase_order dst
USING (
  SELECT purchase_order_order_no,
         SUM( total ) AS total
  FROM   purchase_order_items
  GROUP BY purchase_order_order_no
) src
ON ( dst.order_no = src.purchase_order_order_no )
WHEN MATCHED THEN
  UPDATE SET total = src.total;