В этом учебном пособии вы узнаете, как использовать оператор CASE в SQL Server (Transact-SQL) с синтаксисом и примерами.
Описание
В SQL Server (Transact-SQL) оператор CASE имеет функциональные возможности оператора IF-THEN-ELSE. Вы можете использовать оператор CASE в SQL-предложении.
Синтаксис
Синтаксис оператора CASE в SQL Server (Transact-SQL):
WHEN value_1 THEN result_1
WHEN value_2 THEN result_2
...
WHEN value_n THEN result_n
ELSE result
END
ИЛИ
WHEN condition_1 THEN result_1
WHEN condition_2 THEN result_2
...
WHEN condition_n THEN result_n
ELSE result
END
Параметры или аргументы
expression - выражение, которое будет сравниваться с каждым из предоставленных значений. (то есть: value_1, value_2, ... value_n).
value_1, value_2, ... value_n - значения, которые будут сравниваться. Значения сравниваются в указанном порядке. Когда value соответствует expression, оператор CASE выполнит указанные команды и не будет дальше сравнивать value.
condition_1, condition_2, ... condition_n - условия, которые будут сравниваться. Условия сравниваются в указанном порядке. Как только условие окажется истинным, оператор CASE вернет результат и не будет сравнивать условия дальше. Все условия должны быть одного и того же типа.
result_1, result_2, ... result_n – возвращаемые значение после того, как условие установлено как true. Все значения должны быть одного типа данных.
Примечание
- Если value/condition не определено как TRUE, оператор CASE вернет значение в операторе ELSE.
- Если ELSE опущено, и ни одно условие не является истинным, то оператор CASE вернет NULL.
- Условия сравниваются в указанном порядке. Как только условие окажется истинным, оператор CASE вернет результат и не будет сравнивать условия дальше.
- Вы не можете использовать оператор CASE для управления потоком программы, вместо этого используйте циклы и условные операторы.
Применение
Оператор CASE может использоваться в следующих версиях SQL Server (Transact-SQL):
SQL Server vNext, SQL Server 2016, SQL Server 2015, SQL Server 2014, SQL Server 2012, SQL Server 2008 R2, SQL Server 2008, SQL Server 2005
Пример
Рассмотрим некоторые примеры SQL Server оператора CASE, чтобы понять, как использовать оператор CASE в SQL Server (Transact-SQL). Например:
1 2 3 4 5 6 7 |
SELECT shop_id, CASE market_id WHEN 1 THEN 'IKEA' WHEN 2 THEN 'METRO' ELSE 'EMAG' END FROM markets; |
Или вы можете написать SQL-предложение с помощью оператора CASE следующим образом: (исключая выражение)
1 2 3 4 5 6 7 |
SELECT shop_id, CASE WHEN market_id = 1 THEN 'IKEA' WHEN market_id = 2 THEN 'METRO' ELSE 'EMAG' END FROM markets; |
Следует отметить, что условие ELSE в операторе CASE является необязательным. Его можно было бы опустить. Давайте изменим наши примеры, если условие ELSE опущено.
Ваш оператор SQL будет выглядеть следующим образом:
1 2 3 4 5 6 |
SELECT shop_id, CASE market_id WHEN 1 THEN 'IKEA' WHEN 2 THEN 'METRO' END FROM markets; |
ИЛИ
1 2 3 4 5 6 |
SELECT shop_id, CASE WHEN market_id = 1 THEN 'IKEA' WHEN market_id = 2 THEN 'METRO' END FROM markets; |
Если опущено ELSE, и если условие не было определено как true, оператор CASE возвращает NULL.
Сравнение двух условий
Вот пример, демонстрирующий, как использовать оператор CASE для сравнения различных условий:
1 2 3 4 5 6 |
SELECT CASE WHEN market_id < 100 THEN 'IKEA' WHEN shop_id = 2 THEN 'METRO' END FROM contacts; |
Просто помните, что условия сравниваются в указанном порядке. Как только условие окажется истинным, оператор CASE вернет результат и не будет сравнивать условия дальше. Поэтому будьте осторожны при выборе порядка, в котором перечислены ваши условия.