Регистр выражений в Access - PullRequest
33 голосов
/ 21 апреля 2009

Можете ли вы использовать case выражения в Access? Я пытаюсь определить максимальную дату в 2 столбцах, но получаю синтаксические ошибки в следующем коде:

CASE 
  WHEN dbo_tbl_property.LASTSERVICEDATE > Contour_dates.[Last CP12 Date]
    THEN dbo_tbl_property.LASTSERVICEDATE 
  ELSE Contour_dates.[Last CP12 Date] 
END AS MaxDate

Ответы [ 2 ]

51 голосов
/ 21 апреля 2009

Вместо этого вы можете использовать функцию IIF().

IIF(condition, valueiftrue, valueiffalse)
  • condition - это значение, которое вы хотите проверить.

  • valueiftrue - это значение, которое возвращается, если условие оценивается как ИСТИНА.

  • valueiffalse - это значение, которое возвращается, если условие оценивается как ЛОЖЬ.

Существует также функция Switch, которую легче использовать и понимать, когда у вас есть несколько условий для тестирования:

Switch( expr-1, value-1 [, expr-2, value-2 ] … [, expr-n, value-n ] )

Список аргументов функции Switch состоит из пар выражений и ценности. Выражения оцениваются слева направо, а значение, связанное с первым выражением для оценки True вернулся. Если части не соединены должным образом, ошибка времени выполнения происходит. Например, если expr-1 равно True, Switch возвращает значение-1. Если expr-1 имеет значение False, но expr-2 имеет значение True, Switch возвращает значение-2 и т. д. на.

Switch возвращает нулевое значение, если:

  • Ни одно из выражений не является True.

  • Первое выражение True имеет соответствующее значение, равное Null.

ПРИМЕЧАНИЕ. Коммутатор оценивает все выражения , даже если возвращает только одно из них. По этой причине вы должны следить за нежелательные побочные эффекты. Например, если оценка любого выражение приводит к делению на ноль ошибок, возникает ошибка.

9 голосов
/ 21 апреля 2009

В Access нет оператора case. Вместо этого вы можете использовать оператор switch. Это будет выглядеть примерно так:

switch(dbo_tbl_property.LASTSERVICEDATE > Contour_dates.[Last CP12 Date],dbo_tbl_property.LASTSERVICEDATE,dbo_tbl_property.LASTSERVICEDATE <= Contour_dates.[Last CP12 Date],Contour_dates.[Last CP12 Date])

Для дальнейшего чтения смотрите: http://www.techonthenet.com/access/functions/advanced/switch.php

Или для примера реализации case-функции в VBA:

http://ewbi.blogs.com/develops/2006/02/adding_case_to_.html

С уважением, J.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...