【发布时间】:2019-02-04 08:08:51
【问题描述】:
我正在尝试手动迁移实际上是一个表达式的访问查询(访问中的计算字段。
有问题的访问表达式是:
Balance2: (IIf(([OutstandingBalance]-nz([PartsStockForJobTotals]!
[Expr1]))>0,([OutstandingBalance]-nz([PartsStockForJobTotals]![Expr1])),0))*
[Part Assembly Link Table]![Qty]
到目前为止,我已经成功编写了 SQL 代码:
SELECT
IIF([Order Transactions Table].[OutstandingBalance] -
ISNULL([PartsStockForJobTotals].[EXPR1], 0) >0,
[Order Transactions Table].[OutstandingBalance] -
ISNULL([PartsStockForJobTotals].[EXPR1], 0), 0 *
[Part Assembly Link Table].[QTY]) AS Balance2,
FROM ((([PART LIBARY HEADER]
INNER JOIN [Part Assembly Link Table]
ON [PART LIBARY HEADER].PartID = [Part Assembly Link Table].PartIDParent)
INNER JOIN [PART LIBARY HEADER] AS [PART LIBARY HEADER_1]
ON [Part Assembly Link Table].PartIDChild = [PART LIBARY HEADER].PartID)
INNER JOIN [Order Transactions Table]
ON [PART LIBARY HEADER].[Part Number] = [Order Transactions Table].[Part
Number])
LEFT JOIN PartsStockForJobTotals
ON [Order Transactions Table].[Item Referance] = PartsStockForJobTotals.
[Item Referance]
现在到此为止的所有内容都会返回记录。但是我试图只过滤 'Balance2' 大于 0 的记录。
这是我使用的 WHERE 子句,但它不检索任何行:
WHERE
IIF([Order Transactions Table].[OutstandingBalance] -
ISNULL([PartsStockForJobTotals].[EXPR1], 0) >0,
[Order Transactions Table].[OutstandingBalance] -
ISNULL([PartsStockForJobTotals].[EXPR1], 0), 0 *
[Part Assembly Link Table].[QTY]) > 0;
显然别名不允许在 WHERE 子句中使用,所以我只是将 'Balance2' 复制并粘贴到 where 语句中,并附加一个 > 0
【问题讨论】:
-
@OwlsSleeping
IIF()is available in tsql 尽管我认为Case在大多数情况下更好,仅仅是因为它是可移植的。Iif()在可能倾向于使用三元运算符的情况下似乎是合理的,例如CASE过于冗长。 -
我相信也可以在 T-SQL 中执行 IIF。在这种情况下使用 Case 是否更有利?编辑:@JNevill 说了什么
标签: sql sql-server tsql ms-access migrate