Слишком сложная ошибка выражения при использовании сложных операторов условия IIF - Access SQL - PullRequest
0 голосов
/ 28 декабря 2018

Я получаю ошибку запроса в MS Access "Слишком сложное выражение в выражении запроса".У меня есть куча вложенных выражений IIF со сложными условными выражениями, у меня их около 23, и в настоящее время я на 13, когда они начали ломаться.

Распространенное разрешение, которое я видел, - это создать отдельную таблицу поиска, содержащую возвращаемые значения, но я не думаю, что это будет работать в моем случае, так как у меня сложная логическая логика.

Я исследовал проблему и считаю, что использование оператора SWITCH вызовет ту же проблему.Кто-то из другого поста предложил разбить заявление ИИФ на 2 части, а затем 3-й заключительный ИИФ, чтобы сравнить их, но еще не попробовал. Выражение слишком сложное в 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 голосов
/ 23 января 2019

Я закончил тем, что разбил Заявление IIF на части, как я предложил в своем Первоначальном Вопросе

0 голосов
/ 28 декабря 2018

Неправильные парены.
Если UnwindDate является полем даты / времени, необходимо ввести разделители для параметра даты.Если это текстовый тип, тогда нужны разделители апострофов.Если это тип даты / времени, поле не может содержать строку, поэтому проверка строки не требуется и может привести к ошибке несоответствия типов данных.Если поле имеет текстовый тип, обработайте возможную пустую или пустую строку с помощью: HedgeFile.UnwindDate & "" <> "" (я никогда не допускаю пустую строку в таблицах).

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
...