Множественный вложенный оператор iif в Access

Я пытаюсь рассчитать количество отпускных недель, на которые сотрудник имеет право, используя свои годы службы, со следующими категориями:

0-4 years = 2 weeks
5-14 years = 3 weeks
15-24 years = 4 weeks
25 and up = 5 weeks

Я нашел несколько примеров и попытался выполнить вложенный оператор iif, но продолжал получать сообщение об ошибке. Может кто-нибудь сказать мне, что я делаю неправильно?

VacationWeeks: IIf([YearsInService]<=4, "2",
               IIf([YearsInService]is between 5 and 14, "3",
               IIf([YearsInService]is between 15 and 24, "4",
               IIf([YearsInService]>=25, "5", ”0”))))

person Lynnette James    schedule 14.12.2018    source источник


Ответы (1)


Вероятно, вы получаете сообщения об ошибках из-за двух проблем с вашим кодом:

  1. A BETWEEN оператор имеет синтаксис:

    expr [Not] Between value1 And value2
    

    Вы не должны не включать слово is:

    IIf([YearsInService] is between 5 and 14,
                         ^-------------------- this shouldn't be here
    
  2. Ваш последний аргумент else заключает строку в «умные кавычки» или символ Unicode 0x201C :

    IIf
    (
        [YearsInService] >= 25,
        "5",
        ”0” <--- here
    )
    

    В отличие от стандартной двойной кавычки, которая представляет собой символ Unicode/ASCII 0x0022:

    IIf
    (
        [YearsInService]>=25,
        "5",
        "0"
    )
    

Исправление этих двух проблем приведет к появлению IIF заявление, такое как:

IIf
(
    [YearsInService] <= 4,
    "2",
    IIf
    (
        [YearsInService] between 5 and 14,
        "3",
        IIf
        (
            [YearsInService] between 15 and 24,
            "4",
            IIf
            (
                [YearsInService] >= 25,
                "5",
                "0"
            )
        )
    )
)

Однако вы можете найти применение SWITCH заявление более читабельно:

Switch
(
    [YearsInService] <=  4, "2",
    [YearsInService] <= 14, "3",
    [YearsInService] <= 24, "4",
    [YearsInService] >  24, "5",
    True, "0"
)

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

person Lee Mac    schedule 14.12.2018