|
Программирование >> Построение запросов sql
Рис. 3.41. Результат выполнения запроса с простой операцией CASE Пусть необходимо вывести информацию об оплатах со значением от 50 до 100 с указанием срока давности оплаты: если оплата была произведена до 1999 года, то вывести Давно, если оплата была произведена в 1999 или 2000 годах, то вывести Не очень давно, если позднее - Недавно. Запрос с использованием операции CASE с поиском будет выглядеть следующим образом: SELECT PayFactCD, AccountCD, PaySum, (CASE WHEN PayDate < 01.01.1999 THEN Давно WHEN PayDate BETWEEN 01.01.1999 AND 31.12.2000 THEN Не очень давно ELSE Недавно END) AS Oplata FROM PaySumma WHERE PaySum BETWEEN 50 AND 100;. Результат выполнения запроса представлен на рис. 3.42.
Рис. 3.42. Результат выполнения запроса с операцией CASE с поиском 3.2.3.5.2. Функция COALESCE Функция COALESCE используется для замены вывода неопределенного значения на вывод любого другого и имеет следующий синтаксис: COALESCE (<выражение1> , <выражение2> [, <выражение3> ]...) . Эта функция имеет два или более параметров и возвращает значение первого из параметров, отличного от NULL. Функция COALESCE фактически представляет собой сокращение операции CASE и в зависимости от числа аргументов может быть заменена следующими эквивалентными ей конструкциями: - конструкция COALESCE (<выражение1>, <выражение2>) эквивалентна конструкции CASE WHEN <выражение1> IS NOT NULL THEN <выражение1> ELSE <выражение2> END; - конструкция COALESCE (<выражение1>, <выражение2>,..., <выражениеN>) для N >= 3 эквивалентна конструкции CASE WHEN <выражение1> IS NOT NULL THEN <выражение1> ELSE COALESCE (<выражение2>,..., <выражениеN>) END. Таким образом, эквивалентная конструкция CASE всегда содержит в качестве условия поиска проверку соответствующего выражения из списка функции COALESCE на неравенство NULL. Например, требуется вывести информацию о датах выполнения ремонтных заявок, поступивших от абонентов с номерами лицевых счетов 005488, 115705 и 080270. Если дата выполнения неизвестна, вывести дату поступления заявки. Если ни дата поступления, ни дата выполнения не известны, то вывести Дата неизвестна. Соответствующий запрос будет выглядеть следующим образом: SELECT RequestCD, COALESCE(ExecutionDate,IncomingDate, Дата не известна) AS Date Info FROM Request WHERE AccountCD IN (005488, 115705, 080270);. Результат выполнения запроса представлен на рис. 3.43. Представим данный запрос с помощью операции CASE в следующем виде: SELECT RequestCD, (CASE WHEN ExecutionDate IS NOT NULL THEN ExecutionDate ELSE CASE WHEN IncomingDate IS NOT NULL THEN IncomingDate ELSE Дата неизвестна END) AS Date Info FROM Request WHERE AccountCD IN (005488, 115705, 080270);. Результат выполнения данного запроса совпадает с результатом выполнения предыдущего запроса, использующего функцию COALESCE (рис. 3.43), однако форма записи более длинная и сложная для понимания, чем предыдущая.
Рис. 3.43. Результат выполнения запроса при использовании COALESCE В результате для ремонтных заявок с номерами 5 и 16, у которых дата выполнения неизвестна, выведена дата поступления заявки, а для остальных заявок - дата выполнения. 3.2.3.5.3. Функция NULLIF Функция NULLIF производит при выборке замену заданного значения на NULL. Синтаксис использования имеет следующий вид: NULLIF (<выражение1>, <выражение2>), где <выражение1> - столбец или вычисляемое выражение; <выражение2> - вычисляемое выражение (может включать константы, имена столбцов, функции, а также арифметические операции и операцию конкатенации), со значением которого сравнивается значение <выражение1>. Функция NULLIF возвращает NULL, если значение <выражение1> совпадает со значением <выражение2>, и значение <выражение1> в противном случае. Использование функции NULLIF аналогично использованию следующей конструкции операции CASE: CASE WHEN <выражение1> = <выражение2> THEN NULL ELSE <выражение1> END. Пусть, например, требуется вывести номера лицевых счетов, ФИО абонентов и их номера телефонов, учитывая, что номер телефона 556893 уже не существует, а новый номер неизвестен. Запрос будет выглядеть следующим образом: SELECT AccountCD, Fio, NULLIF (Phone,556893)
|
© 2006 - 2025 pmbk.ru. Генерация страницы: 0
При копировании материалов приветствуются ссылки. |