我有这两个表和 SQL Server 中的一些示例数据。
该Rules
表只是表中的SELECT DISTINCT (DataSource_Id, LocationCode, WarehouseCode, WarehouseName, MTO_Regional)
一个Inventory
。
我想根据where/if 三个“SSIn ...”列中的任何一个中的值来更新表中的SS_Value
列。Rules
MTO_MTS
Inventory
示例: Rules 表中的第一条记录将获取 Inventory 表中的第一个 MTO_MTS 值,该值基于(DataSource_Id、LocationCode、WarehouseCode、WarehouseName、MTO_MTSRegional)匹配并且有一个不为 0 的“SSIn...”列。
因此它可以抓取 Inventory 中的前两条记录中的任何一条,因为这 5 列匹配,并且至少有一个 SSIn.. 列是非零
到目前为止我已经尝试过:
我试过使用游标,但有数百万条记录,所以无法处理。我正在尝试构建一个更新语句,但无法弄清楚语法。
UPDATE Rules r
SET SS_Value = (SELECT TOP(1) MTO_MTS FROM Inventory ip
WHERE r.DataSource_Id = ip.DataSource_Id
AND r.LocationCode = ip.LocationCode
AND r.WarehouseCode = ip.WarehouseCode
AND r.WarehouseName = ip.WarehouseName
AND r.MTO_MTSRegional = ip.MTO_MTSRegional
(ip.SafetyStockInKLG <> 0 OR ip.SafetyStockInLTR <> 0 OR ip.SafetyStockInUnits <> 0)
我认为这个一般想法中的某些东西可能有效,但我无法正确使用语法。
我还尝试了如下语法:
UPDATE Rules
SET ip.SS_Value
FROM InventoryProduction ip
INNER JOIN Rules
我遇到了查询中表的范围问题,并从正在更新的行中获取值以应用于 WHERE 子句。