Sql transact case: Примеры использования выражения CASE в Transact-SQL | Info-Comp.ru
SQL Server функция CASE — Oracle PL/SQL •MySQL •MariaDB •SQL Server •SQLite
В этом учебном пособии вы узнаете, как использовать оператор CASE в SQL Server (Transact-SQL) с синтаксисом и примерами.
Описание
В SQL Server (Transact-SQL) оператор CASE имеет функциональные возможности оператора IF-THEN-ELSE. Вы можете использовать оператор CASE в SQL-предложении.
Синтаксис
Синтаксис оператора CASE в SQL Server (Transact-SQL):
CASE expression
WHEN value_1 THEN result_1
WHEN value_2 THEN result_2
…
WHEN value_n THEN result_n
ELSE result
END
ИЛИ
CASE
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). Например:
SELECT shop_id,
CASE market_id
WHEN 1 THEN ‘IKEA’
WHEN 2 THEN ‘METRO’
ELSE ‘EMAG’
END
FROM markets;
SELECT shop_id, CASE market_id WHEN 1 THEN ‘IKEA’ WHEN 2 THEN ‘METRO’ ELSE ‘EMAG’ END FROM markets; |
Или вы можете написать SQL-предложение с помощью оператора CASE следующим образом: (исключая выражение)
SELECT shop_id,
CASE
WHEN market_id = 1 THEN ‘IKEA’
WHEN market_id = 2 THEN ‘METRO’
ELSE ‘EMAG’
END
FROM markets;
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 будет выглядеть следующим образом:
SELECT shop_id,
CASE market_id
WHEN 1 THEN ‘IKEA’
WHEN 2 THEN ‘METRO’
END
FROM markets;
SELECT shop_id, CASE market_id WHEN 1 THEN ‘IKEA’ WHEN 2 THEN ‘METRO’ END FROM markets; |
ИЛИ
SELECT shop_id,
CASE
WHEN market_id = 1 THEN ‘IKEA’
WHEN market_id = 2 THEN ‘METRO’
END
FROM markets;
SELECT shop_id, CASE WHEN market_id = 1 THEN ‘IKEA’ WHEN market_id = 2 THEN ‘METRO’ END FROM markets; |
Если опущено ELSE, и если условие не было определено как true, оператор CASE возвращает NULL.
Сравнение двух условий
Вот пример, демонстрирующий, как использовать оператор CASE для сравнения различных условий:
SELECT
CASE
WHEN market_id < 100 THEN ‘IKEA’
WHEN shop_id = 2 THEN ‘METRO’
END
FROM contacts;
SELECT CASE WHEN market_id < 100 THEN ‘IKEA’ WHEN shop_id = 2 THEN ‘METRO’ END FROM contacts; |
Просто помните, что условия сравниваются в указанном порядке. Как только условие окажется истинным, оператор CASE вернет результат и не будет сравнивать условия дальше. Поэтому будьте осторожны при выборе порядка, в котором перечислены ваши условия.
SQL-запросы. Условный оператор CASE…WHEN…THEN
-
-
– Автор:
Игорь (Администратор)
В рамках данной статьи я расскажу вам об условной операторе CASE, без которого учет данных в ряде задач превратился бы в нагромождения кусков кода, а так же о том, как его применять в SQL-запросах.
Как бы хорошо вы не спроектировали вашу базу данных, всегда будут возникать задачи, где без условных операторов не обойтись. Например, вместо огромных цифр получить словесное описание, или же в зависимости от наличия (отсутствия) данных добавить в строку дополнительные символы, или как более сложный пример — в зависимости от разных нюансов отнести запись к той или иной группе. Ситуаций масса.
В принципе, у данного оператора существует, как минимум, две формы в разных базах данных. Первый вариант напоминает обычный switch из любого языка программирования. Второй зависит от логических выражений.
Однако, в рамках данной статьи я рассмотрю именно второй вариант, так как у него не возникает проблем с ситуациями вроде CASE WHEN NULL (null в рамках БД не является конкретным значением, поэтому его нельзя использовать в switch подобном операторе). Кроме того, в обыденной жизни чаще всего встречаются задачи именно для второго варианта — вычисление через логические выражения. Поэтому лучше сразу научиться и продолжать использовать именно его.
Обычно, он описывается так (синтаксис может меняться в зависимости от БД):
CASE WHEN bool_expression1 THEN value1 ..... WHEN bool_expressionN THEN valueN ELSE valueElse END
где
bool_expressionX — это логическое условие
valueX — это то значение, которое будет по
CASE ОПЕРАТОР — Oracle PL/SQL •MySQL •MariaDB •SQL Server •SQLite
В этом учебном пособии вы узнаете, как использовать оператор CASE в Oracle/PLSQL c синтаксисом и примерами.
Описание
В Oracle/PLSQL оператор CASE имеет функциональность IF-THEN-ELSE. Начиная с Oracle 9i, вы можете использовать оператор CASE в SQL предложении.
Синтаксис
CASE [ expression ]
WHEN condition_1 THEN result_1
WHEN condition_2 THEN result_2
…
WHEN condition_n THEN result_n
ELSE result
END
Параметры или аргументы
expression не является обязательным. Это значение, которое вы сравниваете с условиями (то есть: condition_1, condition_2 … condition_n).
condition_1 .. condition_n должны быть одного типа. Условия оцениваются по порядку, одно за другим. После того, как условие примет значение TRUE (истина), оператор CASE вернет результат, и не будет оценивать условия дальше.
result_1 .. result_n все должны быть одного типа данных. Это значение возвращается единожды, когда условие примет TRUE (истина).
Примечание
- Если условие не примет TRUE, то оператор CASE вернет значение предложения ELSE.
- Если предложение ELSE опущено и условие не примет TRUE, то оператор CASE вернет NULL.
- Оператор CASE может иметь до 255 сравнений. Каждое предложение WHEN … THEN рассматривает 2 сравнения.
Применение
Оператор CASE можно использовать в следующих версиях Oracle / PLSQL:
- Oracle 12c, Oracle 11g, Oracle 10g, Oracle 9i
Пример
Вы можете использовать оператор CASE в SQL предложении следующим образом:
SELECT table_name,
CASE owner
WHEN ‘SYS’ THEN ‘The owner is SYS’
WHEN ‘SYSTEM’ THEN ‘The owner is SYSTEM’
ELSE ‘The owner is another value’
END
FROM all_tables;
SELECT table_name, CASE owner WHEN ‘SYS’ THEN ‘The owner is SYS’ WHEN ‘SYSTEM’ THEN ‘The owner is SYSTEM’ ELSE ‘The owner is another value’ END FROM all_tables; |
Или вы могли бы написать SQL запрос, используя оператор CASE следующим образом: (опустив expression в предложение WHEN .. THEN). Например:
SELECT table_name,
CASE
WHEN owner=’SYS’ THEN ‘The owner is SYS’
WHEN owner=’SYSTEM’ THEN ‘The owner is SYSTEM’
ELSE ‘The owner is another value’
END
FROM all_tables;
SELECT table_name, CASE WHEN owner=’SYS’ THEN ‘The owner is SYS’ WHEN owner=’SYSTEM’ THEN ‘The owner is SYSTEM’ ELSE ‘The owner is another value’ END FROM all_tables; |
Эти два примера оператора CASE эквивалентны следующему условному оператору IF-THEN-ELSE:
IF owner = ‘SYS’ THEN
result := ‘The owner is SYS’;
ELSIF owner = ‘SYSTEM’ THEN
result := ‘The owner is SYSTEM»;
ELSE
result := ‘The owner is another value’;
END IF;
IF owner = ‘SYS’ THEN result := ‘The owner is SYS’; ELSIF owner = ‘SYSTEM’ THEN result := ‘The owner is SYSTEM»; ELSE result := ‘The owner is another value’; END IF; |
Оператор CASE будет сравнивать каждое значение owner, одно за другим.
Предложение ELSE в операторе CASE не является обязательным. Его можно опустить. Давайте посмотрим предыдущий SQL запрос с опущенным предложением ELSE.
SQL запрос будет выглядеть следующим образом:
SELECT table_name,
CASE owner
WHEN ‘SYS’ THEN ‘The owner is SYS’
WHEN ‘SYSTEM’ THEN ‘The owner is SYSTEM’
END
FROM all_tables;
SELECT table_name, CASE owner WHEN ‘SYS’ THEN ‘The owner is SYS’ WHEN ‘SYSTEM’ THEN ‘The owner is SYSTEM’ END FROM all_tables; |
С отсутствующим предложением ELSE, если ни одно из условий не приняло TRUE, оператор CASE вернет NULL.
Сравнивая 2 условия
Вот пример, который показывает, как использовать оператор CASE, чтобы сравнить различные условия:
SELECT
CASE
WHEN a < b THEN ‘hello’
WHEN d < e THEN ‘goodbye’
END
FROM suppliers;
SELECT CASE WHEN a < b THEN ‘hello’ WHEN d < e THEN ‘goodbye’ END FROM suppliers; |
Сравнение 2-х полей в одном предложении CASE:
SELECT supplier_id,
CASE
WHEN supplier_name = ‘IBM’ and supplier_type = ‘Hardware’ THEN ‘North office’
WHEN supplier_name = ‘IBM’ and supplier_type = ‘Software’ THEN ‘South office’
END
FROM suppliers;
SELECT supplier_id, CASE WHEN supplier_name = ‘IBM’ and supplier_type = ‘Hardware’ THEN ‘North office’ WHEN supplier_name = ‘IBM’ and supplier_type = ‘Software’ THEN ‘South office’ END FROM suppliers; |
Итак, если поле supplier_name = ‘IBM’ и поле supplier_type = ‘Hardware’, то оператор CASE вернет ‘North office’. Если поле supplier_name = ‘IBM’ и supplier_type = ‘Software’, оператор CASE вернет ‘South office’.
SQL | Инструкция SELECT: расширенные возможности
99
Работа с базами данных в .NET Framework — SQL Server 2012 — Инструкция SELECT: расширенные возможности
Исходники баз данных
Следующие подразделы описывают другие предложения оператора SELECT, которые могут быть использованы в запросах, а также агрегатные функции и наборы операторов. Напомню, к данному моменту мы рассмотрели использование предложения WHERE, а в этой статье мы рассмотрим предложения GROUP BY, ORDER BY и HAVING, и предоставим некоторые примеры использования этих предложений в сочетании с агрегатными функциями, которые поддерживаются в Transact-SQL.
Предложение GROUP BY
Предложение GROUP BY группирует выбранный набор строк для получения набора сводных строк по значениям одного или нескольких столбцов или выражений. Простой случай применения предложения GROUP BY показан в примере ниже:
USE SampleDb;
SELECT Job
FROM Works_On
GROUP BY Job;
В этом примере происходит выборка и группирование должностей сотрудников. Результат выполнения этого запроса:
В примере выше предложение GROUP BY создает отдельную группу для всех возможных значений (включая значение NULL) столбца Job.
Использование столбцов в предложении GROUP BY должно отвечать определенным условиям. В частности, каждый столбец в списке выборки запроса также должен присутствовать в предложении GROUP BY. Это требование не распространяется на константы и столбцы, являющиеся частью агрегатной функции. (Агрегатные функции рассматриваются в следующем подразделе.) Это имеет смысл, т.к. только для столбцов в предложении GROUP BY гарантируется одно значение для каждой группы.
Таблицу можно сгруппировать по любой комбинации ее столбцов. В примере ниже демонстрируется группирование строк таблицы Works_on по двум столбцам:
USE SampleDb;
SELECT ProjectNumber, Job
FROM Works_On
GROUP BY ProjectNumber, Job;
Результат выполнения этого запроса:
По результатам выполнения запроса можно видеть, что существует девять групп с разными комбинациями номера проекта и должности. Последовательность имен столбцов в предложении GROUP BY не обязательно должна быть такой же, как и в списке столбцов выборки SELECT.
Агрегатные функции
Агрегатные функции используются для получения суммарных значений. Все агрегатные функции можно разделить на следующие категории:
обычные агрегатные функции;
статистические агрегатные функции;
агрегатные функции, определяемые пользователем;
аналитические агрегатные функции.
Здесь мы рассмотрим первые три типа агрегатных функций.
Обычные агрегатные функции
Язык Transact-SQL поддерживает следующие шесть агрегатных функций: MIN, MAX, SUM, AVG, COUNT, COUNT_BIG.
Все агрегатные функции выполняют вычисления над одним аргументом, который может быть или столбцом, или выражением. (Единственным исключением является вторая форма двух функций: COUNT и COUNT_BIG, а именно COUNT(*) и COUNT_BIG(*) соответственно.) Результатом вычислений любой агрегатной функции является константное значение, отображаемое в отдельном столбце результата.
Агрегатные функции указываются в списке столбцов инструкции SELECT, который также может содержать предложение GROUP BY. Если в инструкции SELECT отсутствует предложение GROUP BY, а список столбцов выборки содержит, по крайней мере, одну агрегатную функцию, тогда он не должен содержать простых столбцов (кроме как столбцов, служащих аргументами агрегатной функции). Поэтому код в примере ниже неправильный:
USE SampleDb;
SELECT LastName, MIN(Id)
FROM Employee;
Здесь столбец LastName таблицы Employee не должен быть в списке выборки столбцов, поскольку он не является аргументом агрегатной функции. С другой стороны, список выборки столбцов может содержать имена столбцов, которые не являются аргументами агрегатной функции, если эти столбцы служат аргументами предложения GROUP BY.
Аргументу агрегатной функции может предшествовать одно из двух возможных ключевых слов:
- ALL
Указывает, что вычисления выполняются над всеми значениями столбца. Это значение по умо
tsql — Как использовать T-SQL Case / When?
Переполнение стека
- Около
Продукты
- Для команд
Переполнение стека
Общественные вопросы и ответыПереполнение стека для команд
Где разработчики и технологи делятся частными знаниями с коллегамиВакансии
Программирование и связанные с ним технические возможности карьерного ростаТалант
Нанимайте технических специалистов и создавайте свой бренд работодателяРеклама
Обратитесь к разработчикам и технологам со всего мира- О компании
Загрузка…
- Авторизоваться
зарегистрироваться текущее сообщество
.
SQL Server CASE .. WHEN .. IN оператор
Переполнение стека
- Около
Продукты
- Для команд
Переполнение стека
Общественные вопросы и ответыПереполнение стека для команд
Где разработчики и технологи делятся частными знаниями с коллегамиВакансии
Программирование и связанные с ним технические возможности карьерного ростаТалант
Нанимайте технических специалистов и создавайте свой бренд работодателяРеклама
Обратитесь к разработчикам и технологам со всего мира- О компании
.Оператор
CASE в Transact-SQL
Оператор Transact-SQL CASE … WHEN очень похож на оператор switch или case на других компьютерных языках. Оператор CASE … WHEN — это скалярное выражение в Transact-SQL, которое оценивает список условий и возвращает значение результата.
Выражения CASE … WHEN, которые можно использовать, включают в оператор SELECT, предложения WHERE, предложения HAVING, предложение ORDER BY, списки IN, операторы DELETE и UPDATE. SQL Server допускает только 10 уровней вложенности в выражения CASE.
Есть два типа выражений CASE … WHEN; это:
- Простой CASE … WHEN выражение
- Поиск CASE … WHEN выражение
Давайте подробно рассмотрим каждый тип выражений CASE … WHEN.
- Simple CASE … WHEN выражение
Функция CASE позволяет нам оценивать значение столбца в строке по нескольким критериям, где каждый критерий может возвращать другое значение. Первым критерием, который оценивается как истинное, будет значение, возвращаемое функцией CASE.Функция CASE оценивает переменную, а также значение столбца. Когда все критерии оцениваются как ложные, функция CASE возвращает значение, в противном случае результатом является выражение else. Но оператор else является необязательным в простом выражении CASE … WHEN. Простая функция CASE имеет ограничение: она проверяет только равенство значений.
Синтаксис:
CASE input_expression
WHEN when_clause THEN result_value
// @@@@@@
ELSE else_result_expression
END
DECLARE @color 9color2
DECLARE @color 9color2
WHEN 1 THEN ‘WHITE’
WHEN 2 THEN ‘BLACK’
ELSE ‘OTHER’
END AS COLOR
Его вывод будет ЧЕРНЫМ, потому что значение @color равно 2, поэтому значение результата будет ЧЕРНЫМ.
2. Поиск CASE … WHEN выражение
Поисковое выражение CASE … WHEN оценивает набор логических выражений для определения результата. Первое логическое выражение, которое оценивается как истинное, будет значением, возвращаемым функцией CASE. Здесь функция CASE не имеет выражения, но предложение WHEN имеет логическое выражение. Он позволяет использовать все операторы сравнения, и мы также можем использовать операторы SQL «И» и «ИЛИ» между каждым логическим выражением.
Но иногда бывает, что более одного логического выражения может быть истинным; в этом случае возвращается первое истинное значение результата логического выражения. Если нет никаких истинных логических выражений, то будет выполнено else, но оператор Else является необязательным в искомом выражении CASE … WHEN.
Синтаксис:
CASE
WHEN Boolean_expression THEN result_value
// @@@@@@@@
ELSE else_result_expression
END
9000 CASE 2 DECLARE @color
@color> = 1 AND @color <= 2 THEN 'WHITE'
WHEN @color> = 3 THEN ‘BLACK’
ELSE ‘OTHER’
END AS COLOR
В приведенном выше коде наше первое логическое выражение true для переменной @color, поэтому результат будет БЕЛЫМ.
Пример:
Сортировка строк таблицы по указанному столбцу в порядке возрастания и убывания.
1. Создайте таблицу книги, например:
СОЗДАТЬ ТАБЛИЦУ
(
Id int Identity (1,1) первичный ключ,
Имя nvarchar (50),
Автор nvarchar (50),
Десятичная цена (18,2)
)
2. Вставьте данные в таблицу, например:
ВСТАВИТЬ В КНИГУ (Имя, Автор, Цена)
ЗНАЧЕНИЯ (‘ASP.NET 3.5 UNLEASHED ‘,’ Stephen Walther ‘, 600),
(‘ DATA STRUCTURES ‘,’ SEYMOUR LIPSCHUTZ ‘, 300),
(‘ jQuery UI ‘,’ Eric Sarrion ‘, 200)
3. Все данные для Книг выглядят так:
4. Создайте хранимую процедуру для сортировки строк таблицы в порядке возрастания или убывания. По умолчанию имена книг расположены в порядке возрастания. См .:
CREATE PROCEDURE SortBooks
(
@column nvarchar (50) = ‘Name’,
@order int = 0
)
AS
BEGIN
SET NOCOUNT ON;
ВЫБЕРИТЕ Id, имя, автора, цену ИЗ ЗАКАЗА КНИГИ BY
CASE
WHEN @ column = ‘Name’ AND @ order = 0 THEN Name END,
CASE
WHEN @ column = ‘Name’ AND @order = 1 THEN Имя END DESC,
CASE
WHEN @ column = ‘Author’ AND @ order = 0 THEN Author END,
CASE
WHEN @ column = ‘Author’ AND @ order = 1 THEN Author END DESC,
CASE
WHEN @ column = ‘Price’ AND @ order = 0 THEN Price END,
CASE
WHEN @ column = ‘Price’ AND @ order = 1 THEN Price END DESC
END
5 .Сортировать по имени автора в возрастающем порядке:
declare @column nvarchar (50) = ‘Author’
declare @order int = 0
exec SortBooks @ column, @ order
.Программирование на T-SQL
, часть 5 — Использование функции CASE — DatabaseJournal.com
Грегори А. Ларсен
Функция CASE очень
полезная функция T-SQL. С помощью этой функции вы можете заменить значение столбца на
другое значение на основе исходного значения столбца. Пример того, где это
функция может пригодиться там, где у вас есть таблица, содержащая столбец с именем
SexCode, где 0 означает женский пол, 1 — мужской и т. Д., И вы хотите вернуть
значение «женский», если значение столбца равно 0, или «мужской», если значение столбца
равно 1 и т. д.. В этой статье будет обсуждаться использование функции CASE в T-SQL SELECT.
заявление.
Функция CASE позволяет
для оценки значения столбца в строке по нескольким критериям, где каждый критерий
может вернуть другое значение. Первый критерий, который оценивается как истинный
будет значением, возвращаемым функцией CASE. Книги по Microsoft SQL Server
В Интернете представлены два разных формата функции CASE. Простой
Формат »выглядит так:
CASE input_expression КОГДА when_expression THEN result_expression [...n] [ ELSE else_result_expression ] КОНЕЦ
И «Формат поиска»
выглядит так:
КЕЙС КОГДА Boolean_expression THEN result_expression [... n] [ ELSE else_result_expression ] КОНЕЦ
Где « вход_выражение»
любое допустимое выражение Microsoft SQL Server, « when_expression» равно
значение, в котором сравнивается input_expression , « result_expression »
— это значение, которое будет возвращено для оператора CASE, если «when_expression»
оценивается как истина, «[…n] «означает, что КОГДА могут существовать несколько условий,
« else_result_expression » — это значение, которое будет возвращено, если не будет «when_expression»
оценивается как истина, а в «Формате поиска» « Boolean_expression»
— это любое логическое выражение, которое, когда оно принимает значение true, возвращает «result_expression» .
Позвольте мне привести пару примеров каждого формата, чтобы помочь вам лучше
понять, как использовать функцию CASE в операторе SELECT.
Для первого примера позвольте мне
покажу вам, как вы могли бы использовать функцию CASE для отображения описания вместо
значения столбца, содержащего код. Я собираюсь использовать свой предыдущий пример
который я описал в верхней части этой статьи, где обсуждал отображение
«женский» или «мужской» вместо полового кода. Вот мой пример кода T-SQL:
создать таблицу пациентов (PatientID int identity, Имя пациента varchar (50), PatientSexCode int) вставить в пациентов (PatientName, PatientSexCode) значения ('Доу, Джейн', 0) вставить в пациентов (PatientName, PatientSexCode) значения ('Doe, Dick', 1) вставить в пациентов (PatientName, PatientSexCode) значения ('Doe, Spot', 2) вставить в пациентов (PatientName, PatientSexCode) значения ('xxxxxxxx', 9) выберите имя пациента, case PatientSexCode когда 0 тогда "женский" когда 1 тогда "мужчина" когда 2 тогда "неизвестно" else 'Invalid PatientSexCode' оканчивается как "Пол пациента" от пациентов
Вот результат этого
Код T-SQL:
Имя пациента Пол пациента --------------------------- ----------------------- Доу, сука Джейн Доу, Дик самец Доу, Место неизвестно xxxxxxxx Invalid PatientSexCode
Этот пример показывает
синтаксис в действии для функции CASE с использованием «простого формата».Как вы видете
функция CASE оценивает PatientSexCode, чтобы определить, является ли он 0, 1 или
2. Если это 0, то в выводе для «Пациент» отображается «женский».
Пол ». Если PatientSexCode равен 1, отображается« мужской », или если
PatientSexCode равен 2, тогда отображается «неизвестно». Теперь, если PatientSexCode равен
любое другое, кроме 0, 1 или 2, то условие «ELSE» функции CASE
будет использоваться и «Invalid PatientSexCode» будет отображаться для «Patient
Пол »колонка.
Теперь та же логика могла быть
написано с использованием «поискового формата» для функции CASE.Вот что
Оператор SELECT будет выглядеть для «Формат поиска»:
выберите имя пациента, кейс если PatientSexCode = 0, то "женский" если PatientSexCode = 1, то мужской если PatientSexCode = 2, то "неизвестно" else 'Invalid PatientSexCode' оканчивается как "Пол пациента" от пациентов
Обратите внимание на небольшие различия
между форматами «Простой» и «Поисковый». В «Простом» формате я указал
имя столбца, для которого значения строки будут сравниваться с выражением when_expressions
, где, как и в формате «Поиск», каждое условие WHEN содержит логическое значение
выражение, которое сравнивает столбец PatientSexCode со значением кода.
Теперь функция CASE может быть
значительно сложнее, чем основные примеры, которые я показал. Предположим, вы
хотите отобразить значение, основанное на значениях двух разных столбцов в
ряд. Вот пример, который определяет, есть ли у продукта в базе данных Northwind.
относится к типу Tins или Bottles и не снят с производства.
Выберите 8 лучших ProductName, кейс когда QuantityPerUnit как "% Tins%" и Снят с производства = 0 затем "Банки" когда QuantityPerUnit как "% бутылок%" и Снят с производства = 0 затем "Бутылки" else "Не банки, не бутылки, или больше не выпускается" конец "Тип или доступность" от Northwind.dbo.Products заказать по ProductName
Выход для вышеуказанного
команда на моем сервере отображает следующее:
ProductName Тип или доступность ----------------------- --------------------------- -------------- Алиса Баранина не в банках, не в бутылках или больше не выпускается Бутылки анисового сиропа Банки для мяса бостонского краба Камамбер Пьеро не в банках, не в бутылках, или производство прекращено Carnarvon Tigers Not Tins, Not Bottles, или производство прекращено Чай не банки, не бутылки, или производство прекращено Бутылки Чанг Chartreuse verte Not Tins, Not Bottles, или производство прекращено
Как видите, я использую
«Формат поиска» для этого вызова функции CASE.Кроме того, каждое предложение WHEN содержит
два разных состояния. Одно условие для определения типа (банки или
бутылок) и другое условие, чтобы определить, был ли продукт
снято с производства. Если QuantityPerUnit содержит строку «Tins» и
Значение столбца «Прекращение» равно 0, тогда «Тип доступности» установлен на «Банки».
Если QuantityPerUnit содержит строку «Бутылки» и столбец «Прекратить»
значение 0, тогда «Тип доступности» установлен на «Бутылки». Для всех остальных условий
для параметра «Тип или доступность» установлено значение «Не банки», «Не бутылки»,
или «Снято с производства.«
Предложение WHEN в CASE
функции оцениваются по порядку. Первое предложение WHEN, которое оценивается как
«Истина» определяет значение, возвращаемое функцией CASE. В основном,
несколько предложений WHEN оцениваются как «True», только значение THEN для первого WHEN
предложение, которое оценивается как «True», используется в качестве возвращаемого значения для CASE
функция. Вот пример, когда несколько предложений WHEN имеют значение «True».
выберите топ-5 заголовков, кейс при цене <12.00, затем "Дешево" когда цена <3,00, то "действительно дешево" если цена> 12.00 и цена <20.00, то "Средняя" else "Дорогой" конец "Ценовая категория" из pubs.dbo.titles
Вывод на мою машину для
этот запрос выглядит так:
title Ценовая категория -------------------------------------------------- ------ ------------ Среднее значение руководства по базе данных занятого руководителя Готовка на компьютере: тайные балансы дешево Вы можете бороться с компьютерным стрессом! Дешево Откровенный разговор о компьютерах Среднее значение Гастрономические угощения Кремниевой долины в среднем
Если посмотреть на сырой
Данные таблицы заголовков в базе данных pubs для заголовка "You Can Combat Computer"
Стресс! »Вы заметите, что эта книга стоит 2 доллара.99. Эта цена составляет
оба условия "цена <12.00" и "цена <3.00" - "True". Поскольку
условия оцениваются по одному, и "цена <12.00" оценивается
до "цена <3.00", "Ценовая категория" для заголовка "Вы можете
Combat Computer Stress! »Установлен на« Дешево ».
Может появиться функция CASE
в разных местах оператора SELECT, он не обязательно должен быть
список выбора в операторе SELECT. Вот пример, когда CASE
функция используется в предложении WHERE.
выберите топ-5 заголовков, цену из pubs.dbo.titles где кейс когда цена <12.00, то "Дешево" когда цена <3,00, то "действительно дешево" если цена> 12.00 и цена <20.00, то "Средняя" else 'Дорогой' конец = 'Средний'
Вывод для этого запроса
выглядит так:
цена титула -------------------------------------------------- ------ -------------- Руководство по базе данных для занятого руководителя 19.9900 Откровенный разговор о компьютерах 19.9900 Гастрономические угощения Кремниевой долины 19.9900 Длительное лишение данных: четыре тематических исследования 19.9900 Суши, кто-нибудь? 14,9900
Здесь я только хотел отобразить
книги из таблицы названий в базе пабов, если ценовая категория
'Средний'. Поместив свою функцию CASE в предложение WHERE, я смог
выполнить это.
Заключение
Как видите КОРПУС
функция - чрезвычайно ценная функция.Это позволяет вам брать данные
столбец и представляют его по-разному в зависимости от одного или нескольких условий
определяется в вызове функции CASE. Я надеюсь, что в следующий раз тебе понадобится
отображать или использовать разные значения для определенных данных столбца, вы будете просматривать
CASE, чтобы узнать, может ли он удовлетворить ваши потребности.
»
См. Все статьи обозревателя Грегори А. Ларсен
.