Программирование >>  Построение запросов sql 

1 ... 28 29 30 [ 31 ] 32 33 34 ... 101


REQUESTCD

AB INFO

FAILURE

CASE

Номер л/с абонента 115705

Код неисправности 1

Погашена

Номер л/с абонента 115705

Код неисправности 5

Погашена

Номер л/с абонента 115705

Код неисправности 3

Заявка не погашена

Номер л/с абонента 115705

Код неисправности 5

Погашена

Номер л/с абонента 115705

Код неисправности 3

Погашена

Рис. 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.

PAYFACTCD

ACCOUNTCD

PAYSUM

OPLATA

005488

58,70

Недавно

005488

56,00

Не очень давно

136160

56,00

Не очень давно

080047

80,00

Давно

080047

80,00

Недавно

080613

56,00

Недавно

115705

58,70

Недавно

136169

58,70

Недавно

443069

80,00

Недавно

080270

57,10

Давно

005488

62,13

Не очень давно

080270

58,10

Недавно

080270

60,10

Недавно

Рис. 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), однако форма записи более длинная и сложная для понимания, чем предыдущая.

REQUESTCD

DATE INFO

2001-12-20

2001-08-12

2001-12-31

2000-12-05

1999-04-13

2000-09-23

2001-12-28

2001-09-06

2000-01-04

2001-12-27

Рис. 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)



1 ... 28 29 30 [ 31 ] 32 33 34 ... 101

© 2006 - 2025 pmbk.ru. Генерация страницы: 0
При копировании материалов приветствуются ссылки.
Яндекс.Метрика