问题:我正在尝试使以下代码在SQL Server中工作。我最初是在Access查询中编写代码的,但是现在我需要将其输入到SQL Server中。我的问题是IIF语句在SQL Server中不起作用。我曾尝试使用Case语句,但最终使我的SQL Server陷入困境,并且从未加载任何数据。关于如何转换要在SQL Server中使用的IIF语句有任何建议吗?对于任何反馈,我们都表示感谢。谢谢!
Access查询中编写的代码:
SELECT Customer.CustomerID,
IIf([ExpenseCode].[SysCode]>='1747',[Amount],0) AS Trains
FROM Customer LEFT JOIN (Expense LEFT JOIN
ExpenseCode ON Expense.SysCode = ExpenseCode.SysCode) ON Customer.CustomerID = Expense.EntityID;
SQL Server中尝试的解决方案:
Select Distinct r.CustomerID
Case
WHEN t.SysCode = '1747'
THEN e.Amount
Else Null
End AS Trains
From ExpenseCode As t, Expense As e, Customer as r
IIF()
自2012年以来在SQL Server中受支持。您需要在MS Access查询中更改的是联接的语法。
尝试:
SELECT
c.CustomerID,
IIf(ec.SysCode >= 1747, Amount, 0) AS Trains
FROM
Customer c
LEFT JOIN Expense e ON c.CustomerID = e.EntityID
LEFT JOIN ExpenseCode ec ON e.SysCode = ec.SysCode;
我还向您的查询添加了表别名,因为它们使可读性更高。最后,我认为SysCode
是一个数字,因此我删除了该值周围的引号以进行比较(它确实是一个字符串,您可以将引号放回去)。