Шрифт:
значение 2 является частью соответствия для условия поиска: простая константа или выражение, которое преобразуется в тип данных, совместимый с типом данных столбца.
* Если идентификатор столбца (значение 1) указан в предложении CASE, то значение 2 остается одиночным в каждом предложении WHEN и будет сравниваться со значением 1.
* Если идентификатор столбца не указан в предложении CASE, то и значение 1, и значение 2 включаются в каждое предложение WHEN в качестве предиката поиска в форме (значение 1 = значение 2).
результат 1 - тот результат, который будет возвращен в случае, когда значение i будет соответствовать значению 2.
результат 2- тот результат, Который будет возвращен в случае, когда значение 1 будет соответствовать значению 3 и т.д.
Предложение CASE возвращает единственное значение. Если не выполняется ни одно условие и не указано предложение ELSE, то возвращаемый результат будет NULL.
Вы должны использовать одну форму синтаксиса или другую. Смешанный синтаксис недопустим.
Использование единственного предложения условие/результат имеет смысл, только если присутствует предложение ELSE. Хотя это менее элегантно, чем использование соответствующих функций COALESCE и NULLIF.
Следующие два примера демонстрируют, как могут быть использованы каждый из двух вариантов синтаксиса для оперирования с одним и тем же набором предикатов.
Простой синтаксис:
SELECT
о.ID,
о.Description,
CASE о.Status
WHEN 1 THEN 'confirmed'
WHEN 2 THEN 'in production'
WHEN 3 THEN 'ready'
WHEN 4 THEN 'shipped'
ELSE 'unknown status ''' || o.Status || ''''
END
FROM Orders o;
Этот синтаксис использует предикаты поиска в предложении WHEN:
SELECT
о.ID,
о.Description,
CASE
WHEN (о.Status IS NULL) THEN 'new'
WHEN (o.Status = 1) THEN 'confirmed'
WHEN (o.Status = 3) THEN 'in production'
WHEN (o.Status = 4) THEN 'ready'
WHEN (o.Status = 5) THEN 'shipped'
ELSE 'unknown status ''' || o.Status || ''''
END
FROM Orders o;
Функция COALESCE позволяет вычислять значение столбца с использованием серии выражений, из которых первое выражение, возвращающее непустое значение, вернет выходное значение.
DSQL, PSQL, ISQL, ESQL, Firebird 1.5 и выше. Любая платформа.
COALESCE (<значение 1> { , значение 2 [, ... значение n]})
значение 1 - значение столбца или выражение, которое будет вычисляться. Если это не NULL, то оно будет возвращаемым значением.
значение 2 - значение столбца или выражение, которое будет вычисляться, если значение 1 будет NULL.
значение n - последнее значение или выражение, которое будет вычисляться, если предыдущие значения в списке будут NULL.
Возвращает первое не NULL значение из списка.
Функция COALESCE о может быть использована для вычисления пары условий или списка из трех или более условий.
В первом варианте (простого, двоичного) синтаксиса COALESCE (значение1, Значение2) логика вычисления эквивалентна:
CASE WHEN V1 IS NOT NULL THEN V1 ELSE V2 END
Если присутствуют три или более аргумента - COALESCE (значение1, значение2, ... значениеN), - логика вычисления эквивалентна следующей:
CASE
WHEN V1 IS NOT NULL THEN V1
ELSE COALESCE (V2,...,Vn)
END
Последнее значение в списке должно быть задано, чтобы быть уверенным, что что-то будет возвращено.
В первом запросе если соединение не находит соответствия в таблице EMPLOYEE для TEAM_LEADER из таблицы PROJECT, то запрос вернет строку ' [Not assigned]' (Не назначено) вместо NULL, которое в противном случае должно было вернуть внешнее соединение в качестве значения FULL NAME: