Access,多个iif函数合二为一

Access, multiple iif functions in one

我正在尝试提出一个新的 iif 语句以具有不同的逻辑,但是当我看到 1 - Master 应该有余额的记录时,我在新的 table 中得到了 0。

  1. 如果 1 - Master = 1234 则使用“平衡”
  2. 如果记录来自 1 - Master <> 1234,则应用 isnull 逻辑。
  3. 如果记录为空,则使用平均因子 * 余额
  4. 如果记录不为空,则使用 factor * balance
IIf([1 - Master].rln='1234', [1 - Master].Balance, 
(IIf(IsNull([0 -  Month End Factors].Factor), [1 - Master].Balance*[0 -  Average Factors].[Avg Factor], [1 - Master].Balance*[0 -  Month End Factors].Factor)))  
AS [Final Balance]

有人可以帮忙吗?我在 运行 之后得到 0,也许我的语句写得不正确。

谢谢。

没有发现语法有任何问题,但表达式可以更简单。考虑:

IIf([1 - Master].rln='1234', [1 - Master].Balance, 
[1 - Master ].Balance * Nz([0 -  Month End Factors].Factor, [0 -  Average Factors].[Avg Factor])) 
AS [Final Balance]

仅当查询中的多个 table 具有相同的字段名称时,字段名称必须以 table 名称作为前缀。

IIf([rln]='1234', [Balance], [Balance] * Nz([Factor], [Avg Factor])) AS [Final Balance]

IsNull() 和 Nz() 都是 VBA 函数。要避免在 SQL 语句中调用 VBA,请使用 IS NULL。

IIf([rln]='1234', [Balance], [Balance] * IIf([Factor] IS NULL, [Avg Factor], [Factor])) AS [Final Balance]

如果rln是数字类型字段,不要在1234左右使用撇号。