2015-12-21 114 views
0

我有两个表,大致相同的列。为什么这个SQL无法识别IF语句中的TargetPosition

我想更新取决于ExecSignedAmount从表FilledOrders总和是否等于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

_“似乎不能识别”_是什么意思?您是否尝试查找“IF ... ELSE”的语法? – CodeCaster

+0

它SQL说无效的列名称:TargetPosition和是的,我查了语法,但我显然不正确地写它。 – ManInMoon

回答

3

您不能在更新查询中使用IF语句。

尝试IIFSql 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; 
+0

它不是IFF,它的IIF –

+1

@PareshJ - 是更新 –

+0

IIF作品 - 谢谢 – ManInMoon

1

不能使用IF声明一样,在你的更新查询。您可以使用CASE这样的语句 -

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; 
+0

只是为了良好的秩序 - 为什么我不能使用IF? – ManInMoon

+0

@ManInMoon:我假设你已经使用了SQL Server 2008版本。否则'iif'是SQL Server 2012中引入的一个很好的功能。你可以同时使用 –

+0

不,我有2014.IIF很好 - 就像知道为什么IF不能像https://msdn.microsoft.com/en- GB /库/ ms182587.aspx – ManInMoon