【发布时间】:2018-12-28 16:27:22
【问题描述】:
我在 MS Access 中遇到查询错误“查询表达式中的表达式太复杂”。我有一堆带有复杂条件语句的嵌套 IIF 语句,我总共有大约 23 个,当它开始中断时,我有 13 个。
我见过的一个常见解决方案是创建一个单独的查找表,其中包含要返回的值,但我认为这不适用于我的情况,因为我有复杂的布尔逻辑。
我已经研究过这个问题,我相信使用 SWITCH 语句会导致同样的问题。 另一个帖子中的某个人建议将 IIF 声明分成两部分,然后是第三个最终 IIF 来比较两者,但还没有尝试过。 Expression Too Complex In Access 2007
iif( (HedgeFile.[UnwindDate] is Not Null OR HedgeFile.[UnwindDate] <> '') AND (HedgeFile.[UnwindDate] <= 12/31/2018 AND HedgeFile.[Current Base Rate] = 0), '2. Terminated',
iif (HedgeFile.[Port] IN ('ASSUME', 'HDLTV'), '3. Port Excluded from Model',
iif (HedgeFile.[Code] = 'WSP', '4. Company Swaps', 'OK') AS FilterName
如果有人对如何解决此问题有任何建议,请提出建议。期待您的来信!
【问题讨论】:
-
除非您需要在 Access 之外运行此查询,否则我会为此创建一个 VBA 函数。向它提供所有输入参数(UnwindDate、Port、Code、...),然后它返回值。附加优势:您可以编写可读且可维护的代码。
-
我会走 VBA 路线,但不幸的是,一旦完成并工作,此代码将转换为 Oracle SQL。谢谢指点。
-
_ 代码将被转换为 Oracle SQL_。那么无论如何你都必须转换它。正如@Andre 建议的那样,使用 VBA,它不会失败。
-
转换它不是我的责任,我会帮忙,它必须是 SQL 格式。
-
那么你就剩下 Switch - 你认为这会导致同样的问题。
标签: sql ms-access switch-statement iif