Microsoft Access Query太复杂,无法运行 - IF公式

时间:2017-05-11 22:58:39

标签: ms-access if-statement

我在Access数据库中有一个查询,当我尝试运行它时,我收到一条错误消息“查询太复杂而无法运行”。运行时错误3360.“问题出在一个公式/编程逻辑上,见下文:

以前的公式如下 - 并且它有效。

IIf([BegTaxBasis]=0 And [Contribution]+[Distribution]=0,
  0,
  IIf([BegTaxBasis]=0 And [TaxIncSubTotal]=0,
     -[Distribution],
     IIf([Distribution]=0,
         0,
         IIf([TBBLL]+[Recourse]+[QualifiedNonrecourse]+[NonRecourse]<[Distribution],
             -[Distribution],
             0)))) 

然后我将其更新为,见下文:

IIf([BegTaxBasis]=0 And [Contribution]+[Distribution]=0,
  0,
  IIf([BegTaxBasis]=0 And [TaxIncSubTotal]=0,
      -[Distribution],
      IIf([Distribution]=0,
         0,
         IIf([TBBLL]>0,
            0,
            IIf([TBBLL]+[Recourse]+[QualifiedNonrecourse]+[NonRecourse]<[Distribution],
               -[Distribution],
               IIf([TBBLL]+[Recourse]+[QualifiedNonrecourse]+[NonRecourse]>[Distribution] And [TBBLL]+[Recourse]+[QualifiedNonrecourse]+[NonRecourse]<0 And [TaxIncSubTotal]<0,
                  [TBBLL]+[Recourse]+[QualifiedNonrecourse]+[NonRecourse]-[TaxIncSubTotal],
                  [TBBLL]+[Recourse]+[QualifiedNonrecourse]+[NonRecourse]))))) 

现在查询不会运行,非常感谢任何帮助,谢谢!

1 个答案:

答案 0 :(得分:0)

您可以尝试将中间值分配给单独的一个或多个字段,然后在 final 表达式中引用这些字段。这仅适用于某些查询和SQL子句,但您没有为您的公式提供上下文,因此我无法对您的特定代码进行更多评论。这些类型的中间字段值不能在JOIN,ORDER BY或WHERE子句中引用 - 仅在其他SELECT字段中引用。字段的顺序很重要......必须先定义字段,然后再在SQL语句中引用它。

这便于重复使用重复表达,例如[TBBLL]+[Recourse]+[QualifiedNonrecourse]+[NonRecourse],因此可以缩短整体查询。

例如:

SELECT ([TBBLL]+[Recourse]+[QualifiedNonrecourse]+[NonRecourse]>[Distribution] 
        And [TBBLL]+[Recourse]+[QualifiedNonrecourse]+[NonRecourse]<0 
        And [TaxIncSubTotal]<0) As Condition1,
   ([TBBLL]+[Recourse]+[QualifiedNonrecourse]+[NonRecourse]-[TaxIncSubTotal]) As TrueValue1,
   ([TBBLL]+[Recourse]+[QualifiedNonrecourse]+[NonRecourse]) As FalseValue1, 
   Iif([Condition1],[TrueValue1],[FalseValue1]) As FalseValue2,
   ...
   [Some final calculation using previous fields] As FinalValue

类似的技术是计算另一个已保存或嵌入查询中的某些值,然后加入该查询并引用 final 表达式的部分计算。该技术可以克服在同一选择查询中定义字段的限制。例如,这将允许在连接表达式中使用中间计算值,而第一种技术不允许这样做。使用一系列已保存的连接查询将绕过June7提到的单查询长度限制。