Оператор CASE |
Оператор CASE возвращает одно из нескольких альтернативных значений в зависимости от результата вычисления выражения. Оператор CASE может быть одного из двух форматов:
<оператор-CASE> = <переключаемый-выбор> | <условный-выбор>
<переключаемый-выбор> - возвращает альтернативу, для которой вычисляемое значение переключателя совпадает со значением выбора, соответствующим данной альтернативе.
Все сравниваемые значения должны быть одного типа или типов, приводимых друг к другу по умолчанию.
<переключаемый-выбор> = CASE <выражение-переключателя> { WHEN <выражение-выбора> THEN <возвращаемое-значение> } [ ELSE <возвращаемое-значение> ] END
<выражение-переключателя> - выражение, результат вычисления которого используется для выбора возвращаемого значения из имеющихся альтернатив.
WHEN - открывает описание элемента выбора в списке альтернатив. Список альтернатив может содержать несколько элементов выбора.
<выражение-выбора> - если результат вычисления этого выражения совпадает со значением переключателя, то возвращается значение текущего элемента выбора. Вычисленное значение должно иметь тот же тип, что и <выражение-переключателя> или приводиться к нему неявным преобразованием типа.
THEN - разделяет <выражение-выбора> и <возвращаемое-значение> в описании элемента выбора.
<возвращаемое-значение> - результат вычисления этого выражения возвращается оператором CASE.
ELSE - задает значение, возвращаемое если ни один из элементов не был выбран.
<условный-выбор> - возвращает альтернативу, для которой выполняется условие выбора альтернативы.
<условный-выбор> = CASE { WHEN <логическое-выражение> THEN <возвращаемое-значение> } [ ELSE <возвращаемое-значение> ] END
WHEN - открывает описание элемента выбора в списке альтернатив. Список альтернатив может содержать несколько элементов выбора.
<логическое-выражение> - если результат вычисления этого выражения true, то возвращается значение текущего элемента выбора.
THEN - разделяет <логическое-выражение> и <возвращаемое-значение> в описании элемента выбора.
<возвращаемое-значение> - результат вычисления этого выражения возвращается оператором CASE.
ELSE - задает значение, возвращаемое если ни один из элементов не был выбран.
CASE проверяет элементы выбора в том порядке, в котором они присутствуют в описании конструкции, и возвращает первый найденный элемент.
Если ни один из элементов не был выбран и блок ELSE опущен, то CASE возвращает NULL.
Пример 1. Оператор SELECT с переключаемым выбором.
В этом примере CASE используется для расшифровки условных обозначений категорий книг (поле type).
SELECT Category = CASE type WHEN 'popular_comp' THEN 'Популярно о компьютерах' WHEN 'mod_cook' THEN 'Современная кухня' WHEN 'business' THEN 'Бизнес' WHEN 'psychology' THEN 'Психология' WHEN 'trad_cook' THEN 'Традиционная кухня' ELSE 'Разное' END, title AS 'Название', price AS 'Цена' FROM titles WHERE price IS NOT NULL ORDER BY type, price
Пример 2. Оператор SELECT с условным выбором.
В этом примере CASE используется для преобразования цены в текстовое название ценовой категории.
SELECT 'Ценовая категория' = CASE WHEN price IS NULL THEN 'Нет данных по цене' WHEN price < 10 THEN 'Дешевая книга' WHEN price >= 10 and price < 20 THEN 'Приемлемая цена' ELSE 'Дорогая книга!' END, title AS 'Название' FROM titles ORDER BY price
Пример 3. Оператор SELECT с условным выбором и функцией SUBSTRING.
В этом примере CASE используется для расшифровки условных обозначений категорий книг (поле type) по первым двум символам категории.
SELECT title AS 'Название', 'Категория' = CASE WHEN SUBSTRING(type, 1, 2) = 'BU' THEN 'Бизнес' WHEN SUBSTRING(type, 1, 2) = 'MC' THEN 'Современная кухня' WHEN SUBSTRING(type, 1, 2) = 'PC' THEN 'Популярно о компьютерах' WHEN SUBSTRING(type, 1, 2) = 'PS' THEN 'Психология' WHEN SUBSTRING(type, 1, 2) = 'TC' THEN 'Традиционная кухня' END FROM titles
Атлантис 5.3.07.