2016-05-11 38 views
0

我想在SQL Server 2012管理工作室(連接到SQL Server 2012)中使用IIF。我可以在Access中生成我需要的東西,但SQL Server中的語法讓我感到沮喪。即使是一些簡單的像IIF與SQL Server 2012的麻煩

SELECT IIF(dbo.GL_Register.Credit_Or_Debit = C,'true','false') 
from dbo.GL_Register 

應該工作,但帶回了以下錯誤:「錯誤列表功能參數:‘=’無法識別無法分析查詢文本

這是很容易做到的。?。訪問我在做什麼錯了感謝

更新,得到了它的使用「喜歡」,而不是平等於是說「FROM」半路工作是一個問題:

SELECT dbo.GL_Account.Account_Code, dbo.GL_Register.Date,  
SUM(IIF(dbo.GL_Register.Credit_Or_Debit like 'C',- 
dbo.GL_Register.Amount,dbo.GL_Register.Amount) AS Expr1 
FROM dbo.GL_Register INNER JOIN 
dbo.GL_Account ON dbo.GL_Register.Account_Id = dbo.GL_Account.Account_Id 
GROUP BY dbo.GL_Account.Account_Code, dbo.GL_Register.Date 
HAVING (dbo.GL_Account.Account_Code = N'11000') 

交流塞斯SQL的作品就像一個魅力是:

SELECT dbo_GL_Account.Account_Code, dbo_GL_Register.Date,  
Sum(IIf([Credit_Or_Debit]="C",-[Amount],[Amount])) AS Amount2 
FROM dbo_GL_Register INNER JOIN dbo_GL_Account ON dbo_GL_Register.Account_Id 
= dbo_GL_Account.Account_Id 
GROUP BY dbo_GL_Account.Account_Code, dbo_GL_Register.Date 
HAVING (((dbo_GL_Account.Account_Code)="11000")); 

回答

2

使用

SELECT case when dbo.GL_Register.Credit_Or_Debit = 'C' 
      then 'true' 
      else 'false' 
     end 
from dbo.GL_Register 
1

的語法錯誤是因爲各地的「C」

我跑了類似的查詢和工作的罰款失蹤報價。

SELECT IIF(dbo.GL_Register.Credit_Or_Debit = 'C','true','false') 
from dbo.GL_Register 
+0

我用「CASE」並能夠做我所需要的。但出於好奇心,我又回去嘗試了你的IIF,並得到了「函數參數列表中的錯誤:'='未被識別。」我仍然不確定爲什麼這不適合我。如果我不得不猜測這是因爲該字段不是數字,因此不喜歡「=」。 – Bouje

+0

列類型不應該是問題。這令人驚訝,不適合你!我唯一的猜測是你的數據庫被設置爲以前的版本(比2012年老)。檢查數據庫上的屬性>選項>兼容性。 – FLICKER