【问题标题】:Expression too Complex Error while using complicated IIF Condition Statements- Access SQL使用复杂的 IIF 条件语句时出现表达式太复杂的错误 - Access SQL
【发布时间】: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


【解决方案1】:

不正确的括号。
如果 UnwindDate 是日期/时间字段,则需要日期参数的分隔符。如果是文本类型,则需要撇号分隔符。如果它是日期/时间类型,则字段不能包含字符串,因此不需要检查字符串,并且可能会导致数据类型不匹配错误。如果字段是文本类型,则处理可能的 null 或空字符串:HedgeFile.UnwindDate &amp; "" &lt;&gt; ""(我从不允许表中的空字符串)。

IIf(Not HedgeFile.[UnwindDate] Is Null 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

Switch(Not HedgeFile.[UnwindDate] Is Null AND HedgeFile.[UnwindDate] <= #12/31/2018# AND HedgeFile.[Current Base Rate] = 0, '2. Terminated', 
HedgeFile.[Port] IN ('ASSUME', 'HDLTV'), '3. Port Excluded from Model',
HedgeFile.[Code] = 'WSP', '4. Company Swaps', TRUE, 'OK') AS FilterName

【讨论】:

    【解决方案2】:

    我最终按照我在原始问题中的建议将 IIF 声明分成几部分。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-11-13
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-02-06
      相关资源
      最近更新 更多