|
Программирование >> Построение запросов sql
COUNT Рис. 3.38. Результат работы функции COUNT Таким образом, только десять разных абонентов из двенадцати подавали заявки на ремонт оборудования, хотя всего в таблице ремонтных заявок содержится 23 записи о заявках (т.е. некоторые абоненты подавали заявки не один раз). 3.2.3.4. Функции на списке значений 3.2.3.4.1. Функции MAXVALUE и MINVALUE Функции MAXVALUE и MINVALUE возвращают максимальное и минимальное значения соответственно из списка значений своих аргументов. Имеют следующий формат: MAXVALUE (<значение1> [,<значение2> ...] ); MINVALUE (<значение1> [,<значение2> ...] ). Например, требуется поставить в соответствие ремонтным заявкам, принятым исполнителем с кодом 1, даты их выполнения или дату 1 января 1999 года, если соответствующая заявка была выполнена раньше этой даты: SELECT RequestCD, MAXVALUE (ExecutionDate, CAST (01.01.1999 AS DATE)) FROM Request WHERE ExecutorCD = 1;. Результат выполнения запроса представлен на рис. 3.39. Из результата предыдущего запроса следует, что заявке с кодом 3, имеющей дату выполнения 8 марта 1998 года (т.е. ранее 1 января 1999 года), поставлена в соответствие дата 1 января 1999 года.
LIST Доставка газа,Заявочный ремонт ГО Рис. 3.40. Результат работы функции LIST 3.2.3.5. Дополнительные возможности вывода в предложении SELECT В стандарте SQL определены средства для выбора вариантов действий в зависимости от значений данных. К таким средствам относятся операция выбора CASE, а также функции вывода (выбора вариантов). В качестве функций вывода используются функции COALESCE, NULLIF, IIF и DECODE, три из которых (COALESCE, NULLIF и DECODE) определены в стандарте SQL, а одна (IIF) является расширением языка именно для СУБД Firebird. Функции вывода при определенных условиях фактически являются сокращенными формами операции CASE. Они всегда могут быть заменены эквивалентными конструкциями CASE, но более сложно записанными. Операция CASE и функции вывода могут использоваться в списке возвращаемых столбцов предложения SELECT, а также в качестве элементов списка группировки предложения GROUP BY (будет рассмотрено позднее). Функция LIST имеет следующий формат: LIST ( [ {ALL DISTINCT} ] <выражение> [ , <разделитель> ] ), где <разделитель> ::={ строковая константа параметр переменная}. Функция LIST возвращает строку, полученную в результате соединения известных значений (не NULL) из списка, представленного набором значений аргумента функции (<выражение>). Функция возвращает NULL, если все значения из списка имеют NULL. Примечание. Входные параметры и переменные могут выступать в качестве разделителей при использовании функции LIST в хранимых процедурах (хранимые процедуры будут подробно описаны далее). В качестве аргумента функции LIST могут быть заданы числовые значения и значения типа дата/время, которые в процессе работы функции преобразуются в строку (результирующее значение имеет тип BLOB). Следует учитывать следующие синтаксические правила: - если ни ALL, ни DISTINCT не указаны, то по умолчанию применяется ALL; - если <разделитель> опущен, то для разделения соединяемых величин используется запятая. Например, для вывода в одну строку через запятую названий всех услуг газоснабжения можно использовать следующий запрос: SELECT LIST (GazServiceNM) FROM Services;. Результат выполнения запроса представлен на рис. 3.40. Операция выбора CASE позволяет определить результат в столбце ТРЗ, исходя из определенных условий. Имеются две формы операции CASE: простая и с поиском. Простая форма имеет следующий синтаксис: CASE <выражение> {WHEN <значение1> THEN результат1} [{WHEN <значение2> THEN результат2}; ... ELSE результат(N+1) END. В этой форме последовательно сравниваются значения при фразах WHEN со значением заданного выражения. При первом же совпадении возвращается значение при соответствующей фразе THEN. Если совпадений нет, то возвращается результат(N+1) при фразе ELSE. Синтаксис операции CASE с поиском имеет следующий вид: CASE {WHEN <условие поиска1> THEN результат1} { WHEN <условие поиска2> THEN результат2};... [ ELSE результат(N+1) END. В этом случае последовательно проверяются все условия при фразах WHEN. Если условие истинно, то возвращается результат соответствующей фразы THEN. Если ни одно условие при фразах WHEN ни оказалось истинным, возвращается результат(N+1) при фразе ELSE. В обоих вариантах в качестве результата после фраз THEN или ELSE может быть задано либо выражение (которое может включать константы, имена столбцов, функции, а также арифметические операции и операцию конкатенации), либо NULL-значение. Если фраза ELSE отсутствует, то операция CASE при отсутствии совпадения (или истинного условия) возвращает NULL. Рассмотрим примеры использование операции CASE в списке возвращаемых элементов предложения SELECT. Приведем пример простой операции CASE. Пусть необходимо вывести следующую информацию о ремонтных заявках абонента, имеющего лицевой счет с номером 115705: номер заявки, номер лицевого счета абонента, сделавшего заявку, код неисправности. В зависимости от значения поля Executed необходимо вывести, погашена заявка или нет. Запрос будет выглядеть следующим образом: SELECT RequestCD, ( Номер л/с абонента AccountCD) AS Ab Info, ( Код неисправности FailureCD) AS Failure, CASE Executed WHEN 0 THEN Заявка не погашена ELSE Погашена FROM Request WHERE AccountCD=115705;. Результат выполнения запроса представлен на рис. 3.41.
|
© 2006 - 2024 pmbk.ru. Генерация страницы: 0
При копировании материалов приветствуются ссылки. |