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

Поддерживает ли MS Access предложение "CASE WHEN" при подключении к ODBC?

Поддерживает ли ODBC предложение CASE WHEN для MS Access? Есть ли другая база данных, которая не поддерживает предложение CASE WHEN? Я пробовал следующий запрос при подключении к MS Access с ODBC, но получаю исключение.

SELECT (CASE WHEN (AGE > 10) THEN 1 ELSE 0 END) FROM demo

[Microsoft][ODBC Microsoft Access Driver] Syntax error (missing operator) in query expression '(CASE WHEN (AGE > 10) THEN 1 ELSE 0 END)'

Я пытаюсь найти общий способ, который работает для большей части базы данных для генерации (вычисления) новых "булевых столбцов" с помощью выражения сравнения при подключении к ODBC. Фактически MS Access поддерживает сравнение в предложении SELECT, но для некоторых других баз данных требуется условие CASE. Для MS Access SQL может быть

SELECT AGE > 10 FROM demo

но в других он должен быть

SELECT (CASE WHEN (AGE > 10) THEN 1 ELSE 0 END) FROM demo

4b9b3361

Ответ 1

Вы можете использовать оператор IIF, как в следующем примере:

SELECT
   IIF(test_expression, value_if_true, value_if_false) AS FIELD_NAME
FROM
   TABLE_NAME

Ответ 2

Поскольку вы используете Access для составления запроса, вы должны придерживаться версии SQL для SQL.

Чтобы выбрать между несколькими различными значениями возврата, используйте функцию switch(). Чтобы немного перевести и расширить ваш пример:

select
  switch(
    age > 40, 4
  , age > 25, 3
  , age > 20, 2
  , age > 10, 1
  , true, 0
  )
from demo

"Истинный" случай является стандартным. Если у вас его нет, и ни один из других случаев не соответствует, функция вернет значение null.

На веб-сайте Office есть документация по этому вопросу, но их пример синтаксиса - VBA, и это также неправильно. Я дал им отзывы об этом, но вы должны хорошо следовать приведенному выше примеру.

Ответ 3

Мне пришлось использовать несколько инструкций IIF для создания аналогичного результата в ACCESS SQL.

IIf([refi type] Like "FHA ST*","F",IIf([refi type]="VA IRRL","V"))

Все оставшиеся остаются Null.