Страницы

Поиск по вопросам

понедельник, 24 сентября 2018 г.

Функции CASE и IIF в SQL

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 EvaluateCount
FROM Products
Здесь значения столбца ProductCount последовательно сравнивается со значениями после операторов WHEN. В зависимости от значения столбца ProductCount функция CASE будет возвращать одну из строк, которая идет после соответствующего оператора THEN. Для возвращаемого результата определен столбец EvaluateCount:
Функция CASE в T-SQL и MS SQL Server
Также функция 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 Category
FROM Products
Фактически все то же самое, что и в предыдущем примере, только после CASE не указывается сравниваемое значение. А сами выражения сравнения стоят после оператора WHEN. И если выражение после оператора WHEN будет истинно, то возвращается значение, которое идет после соответствующего оператора THEN.
CASE WHEN в T-SQL и MS SQL Server

IIF

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

Комментариев нет:

Отправить комментарий