【发布时间】:2020-02-18 18:56:24
【问题描述】:
问题:我正在尝试让下面的代码在 SQL Server 中工作。
我最初在 MS Access 查询中编写了代码,但现在我需要在 SQL Server 中使用它。我遇到的问题是 IIF 语句在 SQL Server 中不起作用。
我曾尝试使用Case 语句,但它最终使我的 SQL Server 陷入困境并且从未加载任何数据。关于如何将IIF 语句转换为在 SQL Server 中使用有什么建议吗?对于任何反馈,我们都表示感谢。谢谢!
用 MS 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()在 SQL Server 中受支持。 -
但是
IIFdoes work in SQL Server;它是在 SQL Server 2012 中引入的。如果您使用的版本早于该版本,则CASE等效项将是CASE WHEN condition THEN truebranch ELSE falsebranch END- 您已将>=转换为=和0转换为NULL,这似乎没有根据。 -
如果您使用的 SQL Server 版本比 2012 年旧,那么您可能应该考虑升级路径。现在完全不支持 2012 年之前的任何版本。
-
您实际收到了什么错误?您对 CASE 的实施看起来已经像是未来的建议。你所说的“陷入困境”是什么意思 - 这是否意味着查询从未完成?还是抛出错误?甚至是未知问题。另一个问题,您将 LEFT JOIN 变成了 CROSS JOIN,而 JOIN 中没有使用任何键 - 所以可能是性能错误?
-
Bad habits to kick : using old-style JOINs - 旧式 逗号分隔的表格列表 样式已替换为 ANSI 中的 proper ANSI
JOIN语法-92 SQL 标准(25 多年前),不鼓励使用。您已经在 MS Access 中拥有正确的JOINs - 不要为新的 SQL Server 代码降级到FROM中旧的“逗号分隔表”方法代码!
标签: sql sql-server ms-access iif