使用复杂的IIF条件语句时表达式过于复杂错误-Access SQL

时间:2018-12-28 16:27:23

标签: sql ms-access switch-statement iif

我在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

如果有人对如何解决此问题有任何建议,请提出建议。期待您的来信!

2 个答案:

答案 0 :(得分:0)

括号不正确。
如果UnwindDate是日期/时间字段,则日期参数需要定界符。如果是文本类型,则需要撇号定界符。如果它是日期/时间类型,那么该字段将无法容纳字符串,因此不需要检查字符串,并且可能导致数据类型不匹配错误。如果field是文本类型,则可以使用HedgeFile.UnwindDate & "" <> ""处理可能的null或空字符串(我绝对不允许在表中使用空字符串)。

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

答案 1 :(得分:0)

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