簡體   English   中英

使用子查詢更新列,過濾出空值

[英]Update column with subquery, filter out null values

我正在嘗試使用子查詢更新列。 但是它給出了一個錯誤:

無法將PRODUCT.AVERAGE_COST更新為NULL

我不知道當子查詢結果為null時如何不更新。

UPDATE PRODUCT P SET P.AVERAGE_COST = 
    (SELECT 
        SUM(C.COST)/SUM(C.QTY)
    FROM PRODUCT_COSTS C
    WHERE C.PRODUCT_CODE = P.PRODUCT_CODE 
    GROUP BY C.PRODUCT_CODE )

如果SUM(C.QTY)0或子查詢結果為null我根本就不想更新。
查詢應在Oracle,MySQL,MSSQL,PostgreSQL上運行。

如果您使用的是MSSQL,請嘗試以下一項:

UPDATE PRODUCT P SET P.AVERAGE_COST = 
(SELECT 
    CASE WHEN ISNULL(SUM(C.QTY),0)='0' THEN '0' ELSE ISNULL(SUM(C.COST),0)/ISNULL(SUM(C.QTY),0) END
FROM PRODUCT_COSTS C
WHERE C.PRODUCT_CODE = P.PRODUCT_CODE 
GROUP BY C.PRODUCT_CODE )

您應該在查詢中添加WHERE子句。 所以它應該看起來像:

UPDATE PRODUCT P SET P.AVERAGE_COST = 
    (SELECT SUM(C.COST)/SUM(C.QTY)
     FROM PRODUCT_COSTS C
     WHERE C.PRODUCT_CODE = P.PRODUCT_CODE)
WHERE
    (SELECT COUNT(1)
     FROM PRODUCT_COSTS C
     WHERE C.PRODUCT_CODE = P.PRODUCT_CODE ) > 0
AND
    (SELECT SUM(C.QTY)
     FROM PRODUCT_COSTS C
     WHERE C.PRODUCT_CODE = P.PRODUCT_CODE ) <> 0

您可以在SQLFiddle中檢查它

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM