Разное

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?

Переполнение стека

  1. Около
  2. Продукты

  3. Для команд
  1. Переполнение стека
    Общественные вопросы и ответы

  2. Переполнение стека для команд
    Где разработчики и технологи делятся частными знаниями с коллегами

  3. Вакансии
    Программирование и связанные с ним технические возможности карьерного роста

  4. Талант
    Нанимайте технических специалистов и создавайте свой бренд работодателя

  5. Реклама
    Обратитесь к разработчикам и технологам со всего мира

  6. О компании

Загрузка…

  1. Авторизоваться
    зарегистрироваться

  2. текущее сообщество

.

SQL Server CASE .. WHEN .. IN оператор

Переполнение стека

  1. Около
  2. Продукты

  3. Для команд
  1. Переполнение стека
    Общественные вопросы и ответы

  2. Переполнение стека для команд
    Где разработчики и технологи делятся частными знаниями с коллегами

  3. Вакансии
    Программирование и связанные с ним технические возможности карьерного роста

  4. Талант
    Нанимайте технических специалистов и создавайте свой бренд работодателя

  5. Реклама
    Обратитесь к разработчикам и технологам со всего мира

  6. О компании

.Оператор

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; это:

  1. Простой CASE … WHEN выражение
  2. Поиск CASE … WHEN выражение

Давайте подробно рассмотрим каждый тип выражений CASE … WHEN.

  1. 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, чтобы узнать, может ли он удовлетворить ваши потребности.

»

См. Все статьи обозревателя Грегори А. Ларсен

.

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *