我在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])))))
现在查询不会运行,非常感谢任何帮助,谢谢!
答案 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提到的单查询长度限制。