Выражение 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...