我有這兩個表和SQL Server中的一些示例數據。
Rules
表只是Inventory
表的SELECT DISTINCT (DataSource_Id, LocationCode, WarehouseCode, WarehouseName, MTO_Regional)
表。
我想在那裏Inventory
/如果有任何三個值「SSIN ......」列更新基礎上,MTO_MTS
值Rules
表SS_Value
列。
例:在規則表將搶在相匹配基礎上(DataSource_Id,LocationCode,WarehouseCode,WarehouseName,MTO_MTSRegional),並有一個庫存表中的第一MTO_MTS值第1記錄「SSIN ......」這是不爲0
所以它可以抓住無論是前兩個記錄清單,因爲這些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子句中的列的值。
這3行中的哪一行是第一行?您如何訂購? (請不要說「因爲它是第一個」,我們需要一種方式來訂購它們) – Lamak
我不知道我100%理解你的問題。但是,我知道沒有對Inventory表的設置順序,只是將該記錄插入到數據庫中,並且存在遞增的Id列。在符合標準的行中,您抓取哪一個並不重要。如果那不能回答你的問題,讓我知道,我可以嘗試更好地理解。 – mrshickadance
「規則表中的第一條記錄將獲取」庫存表「中的第一條** MTO_MTS值,那麼,哪一條是第一條呢?有3個選項 – Lamak