Подтвердить что ты не робот

Выражения case в Access

Можете ли вы использовать выражения 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
4b9b3361

Ответ 1

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

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

  • valueiftrue - это значение, которое возвращается, если условие имеет значение TRUE.

  • valueiffalse - это значение, которое возвращается, если условие принимает значение FALSE.

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

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

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

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

  • Ни одно из выражений не верно.

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

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

Ответ 2

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

Ответ 3

FWIW - IIF - это перетаскивание, и решение коммутатора кажется недействительным для SQL (возможно, я сделал что-то не так). Я ввел значения, которые Fionnuala предложил в новую таблицу с именем AccessObjectXref:

ID ObjectType ObjectDesc 1 -32768 Форма 2 -32766 Макро 3 -32764 Report 4 -32761 Модуль 5 -32758 Пользователи 6 -32757 DB Document 7 1 Таблица 8 2 DB 9 3 Контейнер 10 5 Запрос 11 8 Подкатегория

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

SELECT objectdesc, Count(*) AS Expr1 
FROM msysobjects, AccessObjectTypeXref 
where type = objecttype group by objectdesc order by objectdesc

Я получил список типов объектов: Значение значений MsysObjects