我有两张大致相同列的表格。
我想更新表Orders的Status列,具体取决于表FilledOrders中ExecSignedAmount的总和是否等于Orders.TargetPosition
但是这个UPDATE语句似乎没有识别TargetPosition:
UPDATE [FX_PROD].[dbo].[tblOrders]
SET [Status] = (IF ((SELECT SUM([ExecSignedAmount])
FROM [FX_PROD].[dbo].[tblFilledOrders]
WHERE [OrderID] = 2) = [FX_PROD].[dbo].[tblOrders].[TargetPosition]) 'YES' ELSE 'NO')
WHERE [OrderID] = 2;
我做错了什么?
答案 0 :(得分:3)
您无法在更新查询中使用IF语句。
在Sql Server 2012+
UPDATE [FX_PROD].[dbo].[tblOrders]
SET [Status] = (IIF ((SELECT SUM([ExecSignedAmount])
FROM [FX_PROD].[dbo].[tblFilledOrders]
WHERE [OrderID] = 2) = [FX_PROD].[dbo].[tblOrders].[TargetPosition]) ,'YES','NO')
WHERE [OrderID] = 2;
或小于sql server 2012
的任何内容使用case statement
UPDATE [FX_PROD].[dbo].[tblOrders]
SET [Status] = (case when ((SELECT SUM([ExecSignedAmount])
FROM [FX_PROD].[dbo].[tblFilledOrders]
WHERE [OrderID] = 2) = [FX_PROD].[dbo].[tblOrders].[TargetPosition]) then 'YES' else 'NO' end)
WHERE [OrderID] = 2;