В этом руководстве вы узнаете, как использовать функцию 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;
На следующем рисунке показан результат:
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() для возврата одного из двух значений в зависимости от результата первого аргумента.