Функции CASE и IIF
CASE
Функция CASE проверяет значение некоторого выражение, и в зависимости от результата проверки может возвращать тот или иной результат.
CASE принимает следующую форму:
1 2 3 4 5 6 7 | CASE выражение WHEN значение_1 THEN результат_1 WHEN значение_2 THEN результат_2 ................................. WHEN значение_N THEN результат_N [ELSE альтернативный_результат]END |
Возьмем для примера следующую таблицу Products:
1 2 3 4 5 6 7 8 | 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:
1 2 3 4 5 6 7 8 | SELECT ProductName, Manufacturer, CASE ProductCount WHEN 1 THEN 'Товар заканчивается' WHEN 2 THEN 'Мало товара' WHEN 3 THEN 'Есть в наличии' ELSE 'Много товара' END AS EvaluateCountFROM Products |
Здесь значения столбца ProductCount последовательно сравнивается со значениями после операторов WHEN. В зависимости от значения столбца ProductCount функция CASE будет возвращать одну из строк, которая идет после соответствующего оператора THEN. Для возвращаемого результата определен столбец EvaluateCount:

Также функция CASE может принимать еще одну форму:
1 2 3 4 5 6 7 | CASE WHEN выражение_1 THEN результат_1 WHEN выражение_2 THEN результат_2 ................................. WHEN выражение_N THEN результат_N [ELSE альтернативный_результат]END |
Например, применительно к таблице Products:
1 2 3 4 5 6 7 8 | 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 CategoryFROM Products |
Фактически все то же самое, что и в предыдущем примере, только после CASE не указывается сравниваемое значение. А сами выражения сравнения стоят после оператора WHEN. И если выражение после оператора WHEN будет истинно, то возвращается значение, которое идет после соответствующего оператора THEN.

IIF
Функция IIF в зависимости от результата условного выражения возвращает одно из двух значений. Общая форма функции выглядит следующим образом:
1 | IIF(условие, значение_1, значение_2) |
Если условие в функции IIF истинно то возвращается значение_1, если ложно, то возвращается значение_2. Например:
1 2 3 | SELECT ProductName, Manufacturer, IIF(ProductCount>3, 'Много товара', 'Мало товара')FROM Products |
