无法更新 CTE。我看到您想要更新表中的所有行,除了每个 (Date_key, ITEM_KEY, location_key) 组中的一个,尽管我不清楚您是要排除组中最新的还是最旧的行。您将其命名为 min_age,但看起来您实际上是在查看最大年龄。您也没有指定每个组的最小或最大 INVENTORY_AGE 值是否唯一。无论如何,我希望下面的例子能让你知道如何处理这个问题。尝试类似:
UPDATE DWH_FACT_INVENTORY
SET ISSUED_QUANTITY = 0
WHERE ISSUED_QUANTITY <> 0 AND
INVENTORY_AGE <> (
SELECT MAX(INVENTORY_AGE)
FROM DWH_FACT_INVENTORY mdfi
WHERE mdfi.Date_key = DWH_FACT_INVENTORY.Date_key AND
mdfi.ITEM_KEY = DWH_FACT_INVENTORY.ITEM_KEY AND
mdfi.location_key = DWH_FACT_INVENTORY.location_key
)
或者是这样的:
UPDATE DWH_FACT_INVENTORY
SET ISSUED_QUANTITY = 0
FROM DWH_FACT_INVENTORY INNER JOIN
(
SELECT Date_key, ITEM_KEY, location_key, MAX(INVENTORY_AGE) AS max_age
FROM DWH_FACT_INVENTORY
GROUP BY Date_key, ITEM_KEY, location_key
) mdfi ON mdfi.Date_key = DWH_FACT_INVENTORY.Date_key AND
mdfi.ITEM_KEY = DWH_FACT_INVENTORY.ITEM_KEY AND
mdfi.location_key = DWH_FACT_INVENTORY.location_key
WHERE ISSUED_QUANTITY <> 0 AND
INVENTORY_AGE <> max_age