2015-12-21 82 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