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