Функция SQL Server IIF

В этом руководстве вы узнаете, как использовать функцию SQL Server IIF() для добавления логики if-else в запросы.

Введение в функцию SQL Server IIF()

Функция IIF() принимает три аргумента. Она оценивает первый аргумент и возвращает второй аргумент, если первый аргумент истинен; в противном случае она возвращает третий аргумент.

Ниже показан синтаксис функции IIF():

IIF(boolean_expression, true_value, false_value)

В этом синтаксисе:

  • boolean_expression — выражение для оценки. Это должно быть допустимое логическое выражение, иначе функция выдаст ошибку.
  • true_value — это возвращаемое значение, если логическое_выражение принимает значение true.
  • false_value — это возвращаемое значение, если логическое_выражение оценивается как ложное.

Фактически функция IIF() является сокращением выражения CASE :

CASE 
    WHEN boolean_expression 
        THEN true_value
    ELSE
        false_value
END

Примеры функций SQL Server IIF()

Давайте рассмотрим несколько примеров использования функции SQL Server IIF().

A) Использование функции SQL Server IIF() на простом примере

В этом примере функция IIF() проверяет, что 10 < 20, и возвращает строку True:

SELECT 
    IIF(10 < 20, 'True', 'False') Result ;

Вот результат:

Result
------
True
(1 row affected)

B) Пример использования функции SQL Server IIF() с табличным столбцом

В следующем примере функция IIF() вкладывается в функции IIF() и возвращает соответствующий статус заказа на основе номера статуса:

SELECT    
    IIF(order_status = 1,'Pending', 
        IIF(order_status=2, 'Processing',
            IIF(order_status=3, 'Rejected',
                IIF(order_status=4,'Completed','N/A')
            )
        )
    ) order_status,
    COUNT(order_id) order_count
FROM    
    sales.orders
WHERE 
    YEAR(order_date) = 2018
GROUP BY 
    order_status;

На следующем рисунке показан результат:

Пример функции SQL Server IIF

C) Использование функции SQL Server IIF() с агрегатными функциями

В этом примере используется функция IIF() с функцией SUM() для получения количества заказов по статусу заказа в 2018 году.

SELECT    
    SUM(IIF(order_status = 1, 1, 0)) AS 'Pending', 
    SUM(IIF(order_status = 2, 1, 0)) AS 'Processing', 
    SUM(IIF(order_status = 3, 1, 0)) AS 'Rejected', 
    SUM(IIF(order_status = 4, 1, 0)) AS 'Completed', 
    COUNT(*) AS Total
FROM    
    sales.orders
WHERE 
    YEAR(order_date) = 2017;

В этом примере функция IIF() возвращает 1 или ноль, если статус совпадает. Функция SUM() возвращает количество заказов для каждого статуса.

Вот что получилось:

Пример сводной функции SQL Server IIF

В этом руководстве вы узнали, как использовать функцию SQL Server IIF() для возврата одного из двух значений в зависимости от результата первого аргумента.

Мирослав С.

Автор статей, ИБ-специалист