Выражение CASE проверяет истинность набора условий и в зависимости от результата проверки может возвращать тот или иной результат. Это выражение имеет следующую форму:
CASE WHEN условие_1 THEN результат_1 WHEN условие_2 THEN результат_2 ................................. WHEN условие_N THEN результат_N [ELSE альтернативный_результат] END
Выражение CASE последовательно просматривает все выражения с операторами WHEN. После оператора WHEN указывается условие. Если оно истинно, то возвращается результат, который указан после оператора THEN. Если условие ложно, то выражение CASE переходит к следующего оператору WHEN.
В конце можно указать необязательный оператор ELSE, который возвращает результат, если условие всех предыдущих операторов WHEN оказалось ложным.
Завершается определение CASE оператором END.
Возьмем для примера следующую таблицу products:
DROP TABLE IF EXISTS products; CREATE TABLE products ( id INTEGER PRIMARY KEY AUTOINCREMENT, name TEXT NOT NULL, -- название товара company TEXT NOT NULL, -- производитель items_count INTEGER DEFAULT 0, -- количество price INTEGER NOT NULL -- цена ); INSERT INTO products (name, company, items_count, price) VALUES ('iPhone 13', 'Apple', 3, 76000), ('iPhone 12', 'Apple', 2, 51000), ('Galaxy S21', 'Samsung', 2, 56000), ('Galaxy S20', 'Samsung', 1, 41000), ('P40 Pro', 'Huawei', 5, 36000);
Выполним запрос к этой таблице и используем функцию CASE:
SELECT name, items_count, CASE WHEN items_count = 1 THEN 'Товар заканчивается' WHEN items_count = 2 THEN 'Мало товара' WHEN items_count = 3 THEN 'Есть в наличии' ELSE 'Много товара' END AS category FROM products;
Функция IIF в зависимости от результата условного выражения возвращает одно из двух значений. Общая форма функции выглядит следующим образом:
IIF(условие, значение_1, значение_2)
Если условие, передаваемое в качестве первого параметра, верно, то возвращается первое значение, иначе возвращается второе значение. Например:
SELECT name, company, items_count, IIF(items_count > 2, 'Много товара', 'Мало товара') AS status FROM products;
Функции IIF могут быть вложенными:
SELECT name, company, items_count, IIF(items_count == 1, 'Товар заканчивается', IIF(items_count==2, 'Мало товара', IIF(items_count==3, 'Есть в наличии', 'Много товара'))) AS status FROM products;
В выражении IIF(items_count == 1, 'Товар заканчивается', IIF(items_count==2...
функция IIF проверяет, равно ли значение items_count числу 1.
Если равно, то возвращается строка "Товар заканчивается". Если не равно то возвращается результат далее вызываемой функции IIF: IIF(items_count==2...