Множественный вложенный оператор iif в Access - PullRequest
0 голосов
/ 15 декабря 2018

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

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”))))

1 Ответ

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

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

  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"
)

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

...