2012-05-04 5 views
1

Я пытаюсь написать оператор OR в дизайне запроса в Access и его не работает! statementis ниже:Запрос доступа Если/или условие

Duration:If([Status2]="Q","2.5 Hours",IIf([Status2]=WS,"4 Hours", IIf([Status2]=MG,"3 Hours 15 Mins",IIf([Status2]=ID,"3.5 Hours"))))

+1

Что значит, что он не работает? Вы имеете в виду, что вам запрещено писать выражение OR или вы можете написать выражение, но оно не дает вам правильных результатов? –

ответ

0

Если это прямая копия из базы данных доступа вы пропускаете I на Если в начале. это должно быть IIF, а не IF.

1

Как указал Zaider89, вы оставили I с первых IIf().

Также вы сравниваете [Status2] с 4 различными значениями: Q; WS; MG; Я БЫ. Вы заключили первое из этих значений с кавычками, но не с другими. Это заставляет меня подозревать, что db-движок будет обрабатывать неуказанные значения в качестве параметров и попросит вас указать значения для WS, MG и ID.

Последний из ваших IIf() выражений включает «истинную часть», но не «ложную часть»:

IIf([Status2]=ID,"3.5 Hours") 

Вы могли бы исправить эти проблемы, но я предлагаю вам рассмотреть возможность использования Switch Function вместо этого. Попробуйте следующее в одной строке в сетке проектирования запроса в столбце рядом с вашей попыткой IIf().

Duration:Switch([Status2]="Q","2.5 Hours", 
[Status2]="WS","4 Hours", 
[Status2]="MG","3 Hours 15 Mins", 
[Status2]="ID","3.5 Hours") 

Этот подход Switch() выглядит мне лучше. Однако я думаю, что было бы лучше создать отдельную таблицу поиска с одним столбцом для [Status2] и еще один для отображаемого значения. Затем присоедините эту таблицу к вашему запросу. После создания таблицы его легко использовать в ваших запросах, и я думаю, что это проще понять, чем подходы, использующие Switch() или вложенные выражения IIf(). Также было бы проще расширить, когда вам нужно добавить новые условия - просто добавьте их в виде строк в справочной таблице.

Смежные вопросы