Функции CASE и IIF

Последнее обновление: 29.07.2017

CASE

Функция CASE проверяет значение некоторого выражение, и в зависимости от результата проверки может возвращать тот или иной результат.

CASE принимает следующую форму:

CASE выражение
	WHEN значение_1 THEN результат_1
	WHEN значение_2 THEN результат_2
	.................................
	WHEN значение_N THEN результат_N
	[ELSE альтернативный_результат]
END

Возьмем для примера следующую таблицу Products:

CREATE TABLE Products
(
    Id INT IDENTITY PRIMARY KEY,
    ProductName NVARCHAR(30) NOT NULL,
    Manufacturer NVARCHAR(20) NOT NULL,
    ProductCount INT DEFAULT 0,
    Price MONEY NOT NULL
);

Выполним запрос к этой таблице и используем функцию CASE:

SELECT ProductName, Manufacturer,
	CASE ProductCount
		WHEN 1 THEN 'Товар заканчивается'
		WHEN 2 THEN 'Мало товара'
		WHEN 3 THEN 'Есть в наличии'
		ELSE 'Много товара'
	END AS EvaluateCount
FROM Products

Здесь значения столбца ProductCount последовательно сравнивается со значениями после операторов WHEN. В зависимости от значения столбца ProductCount функция CASE будет возвращать одну из строк, которая идет после соответствующего оператора THEN. Для возвращаемого результата определен столбец EvaluateCount:

Функция CASE в T-SQL и MS SQL Server

Также функция CASE может принимать еще одну форму:

CASE
	WHEN выражение_1 THEN результат_1
	WHEN выражение_2 THEN результат_2
	.................................
	WHEN выражение_N THEN результат_N
	[ELSE альтернативный_результат]
END

Например, применительно к таблице Products:

SELECT ProductName, Manufacturer,
	CASE
		WHEN Price > 50000 THEN 'Категория A'
		WHEN Price BETWEEN 40000 AND 50000 THEN 'Категория B'
		WHEN Price BETWEEN 30000 AND 40000 THEN 'Категория C'
		ELSE 'Категория D'
	END AS Category
FROM Products

Фактически все то же самое, что и в предыдущем примере, только после CASE не указывается сравниваемое значение. А сами выражения сравнения стоят после оператора WHEN. И если выражение после оператора WHEN будет истинно, то возвращается значение, которое идет после соответствующего оператора THEN.

CASE WHEN в T-SQL и MS SQL Server

IIF

Функция IIF в зависимости от результата условного выражения возвращает одно из двух значений. Общая форма функции выглядит следующим образом:

IIF(условие, значение_1, значение_2)

Если условие в функции IIF истинно то возвращается значение_1, если ложно, то возвращается значение_2. Например:

SELECT ProductName, Manufacturer,
	IIF(ProductCount>3, 'Много товара', 'Мало товара')
FROM Products
Функция IIF в T-SQL SQL Server
Помощь сайту
Юмани:
410011174743222
Перевод на карту
Номер карты:
4048415020898850