Ответ 1
Вы можете использовать оператор IIF
, как в следующем примере:
SELECT
IIF(test_expression, value_if_true, value_if_false) AS FIELD_NAME
FROM
TABLE_NAME
Поддерживает ли 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
Вы можете использовать оператор IIF
, как в следующем примере:
SELECT
IIF(test_expression, value_if_true, value_if_false) AS FIELD_NAME
FROM
TABLE_NAME
Поскольку вы используете 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, и это также неправильно. Я дал им отзывы об этом, но вы должны хорошо следовать приведенному выше примеру.
Мне пришлось использовать несколько инструкций IIF для создания аналогичного результата в ACCESS SQL.
IIf([refi type] Like "FHA ST*","F",IIf([refi type]="VA IRRL","V"))
Все оставшиеся остаются Null.