UPDATE QITEM
SET QTYONHAND = QTYONHAND + (SELECT SUM(DELQTY)
FROM QDEL
WHERE QITEM.ITEMNAME = QDEL.ITEMNAME);
我正在尝试更新初始值均为 1000 的库存列,并将 QDEL 表中的交货次数添加到该 1000 中。这有效,但 QDEL 表中没有交付的行中存在空值。我不知道为什么???
因为如果所有DELQTY
行都NULL
SUM
则返回NULL
。你可以做这样的事情:
UPDATE QITEM
SET QTYONHAND = QTYONHAND + COALESCE((SELECT SUM(DELQTY)
FROM QDEL
WHERE QITEM.ITEMNAME = QDEL.ITEMNAME), 0);
您需要
添加WHERE EXISTS
,以便仅更新QDEL
中至少有一个相应记录的行:
UPDATE qitem qi
SET qi.qtyonhand = qi.qtyonhand + ( SELECT SUM(qd.delqty)
FROM qdel qd
WHERE qd.itemname = qi.itemname )
WHERE EXISTS ( SELECT 1 FROM qdel qd
WHERE qd.itemname = qi.itemname );
附言如果 QDEL
中的 delqty
值可能为 NULL,则需要使用 SUM(NVL(qd.delqty, 0))
(或SUM(COALESCE(qd.delqty, 0))
(而不是 SUM(qd.delqty)
。
使用 NVL 始终返回总和,即使没有发生任何交付。
UPDATE QITEM
SET QTYONHAND = QTYONHAND + (SELECT NVL(SUM(DELQTY),0)
FROM QDEL
WHERE QITEM.ITEMNAME = QDEL.ITEMNAME);