Добавлен: 19.10.2018
Просмотров: 7966
Скачиваний: 3
56
В строке «Групповая операция» щелчком мыши можно открыть список
доступных функций, в котором можно осуществить выбор нужной
статистической функций для выполняемых над полем вычислений.
На рис. 2.17 приведен пример использования групповых операций в
запросе (Count – подсчет числа сотрудников, работающих на каждой кафедре).
Рис. 2.18. Запрос с вычисляемым полем, используемым в условии отбора.
Групповые операции.
В Access предварительно упорядочивать таблицу по полю, по которому
ведется группировка, не обязательно.
Выражения, определяющие вычисляемые поля, создаются с помощью
мастера простых запросов или вводятся пользователем в строку «Групповая
операция» бланка запроса. В бланке запроса задают также условия отбора, с
помощью которых определяются группы, для которых вычисляются итоговые
значения, записи, включаемые в вычисления, или результаты, отображаемые
после выполнения расчетов. На рис. 2.18 изображен запрос, в котором условия
отбора применены к вычисляемому полю («Выдать список кафедр, на которых
работает меньше 3 человек»).
Если предположить (а это практически всегда так), что нет кафедр, на
которых не работает ни одного человека, то результат запроса будет верен и
когда задано внутреннее соединение, и если задано левое соединение. Но,
57
предположим, что задается аналогичный по существу запрос «Выдать список
сотрудников, имеющих меньше двух детей» на двух связанных таблицах
«СОТРУДНИК» и «ДЕТИ». Всегда есть вероятность, что имеются
сотрудники, которые не имеют детей. В случае если будет использовано
внутреннее соединение (а оно задается по умолчанию), то такие сотрудники
не попадут в ответ (т. е. результат ответа будет не соответствовать
действительности). На результат запроса «Выдать список сотрудников,
имеющих больше двух детей» параметры объединения таблиц не окажут
влияния.
Резюме:
1. При реализации запросов на связанных таблицах по ER-модели
уточните характер связи между соответствующими объектами (это
может повлиять на формулировку запроса).
2. Определите, какие должны быть заданы параметры объединения
для данного запроса (в случае необходимости измените эти
параметры).
3. Будьте внимательны при формулировании запроса: даже на
первый взгляд однотипные запросы требуют разной реализации.
Запрос, использующий статистические функции, может не включать
поле, по которому осуществляется группировка. В этом случае функция будет
относиться ко всей совокупности отобранных данных.
2.2.5 Запросы, содержащие вычисляемые поля
Существует ряд вычислений, которые можно выполнить в запросе,
например, перемножить значения двух полей или вычислить дату, отстоящую
на три месяца от текущей даты и т. п.
Выражения, определяемые пользователем, дают возможность выполнять
действия с числами, датами и текстовыми значениями в каждой записи с
использованием данных из одного или нескольких полей. Допустимые
операции будут зависеть от типа полей, участвующих в выражении.
Так, для текстовых полей, возможно, использование оператора “+”,
который в этом случае воспринимается как конкатенация (соединение) строк.
58
Рис. 2.19. Создание таблицы "СОТРУДНИК1"
Создадим таблицу "Сотрудник1" (рис. 2.19), подобную таблице
"СОТРУДНИК", только поле "ФИО" разобьем на три поля: "Фамилия", "Имя",
"Отчество". Предположим, что вы хотите вывести все три поля в одном столбце.
Для этого можно использовать выражение:
[Фамилия] + " " + [Имя] + " " +[Отчество]
Внимание!!! Если хотя бы одно из этих трех полей будет не заполнено (причем
безразлично, будет это пустое поле, или там будут введены
пробелы), то вся строка будет «пустой».
В связи с этим рекомендуется вместо операции “+”, использовать
операцию “&”. В этом случае выражение будет иметь вид:
[СОТРУДНИК1]![Фамилия] & " " & [СОТРУДНИК1]![Имя] & " " &
[СОТРУДНИК1]![Отчество]
Для расчетов с использованием формул, определяемых пользователем,
требуется создать новое вычисляемое поле прямо в бланке запроса.
Вычисляемое поле создается путем ввода требуемого выражения в пустую
колонку в строку «поле» в бланке запроса (рис. 2.20).
59
Рис. 2.20. Использование выражений с тестовыми полями
Выражение может вводиться вручную, а можно для этих целей
воспользоваться построителем выражений.
Для получения списка, включающего фамилии и инициалы сотрудников
можно использовать следующее выражение:
фамилия_инициалы:
[СОТРУДНИК1]![Фамилия]&" "&Left([СОТРУДНИК1]![Имя];1)&"."&" "&
Left([СОТРУДНИК1]![Отчество];1)& "."
В этом выражении использована функция Left. Второй аргумент этой
функции определяет число возвращаемых символов.
Для числовых значений можно использовать любые арифметические
операторы. На рис. 2.21 используется операция сложения над числовыми
величинами.
60
Результаты вычислений не обязательно должны отображаться в ответе.
Их можно использовать в условиях отбора для определения записей, которые
выбираются в запросе, или для определения записей, над которыми
производятся какие-либо действия. Например, на рис. 2.21 изображен запрос:
«Выдать список сотрудников, зарплата которых превышает 2000 рублей». Само
вычисляемое поле только используется в условиях отбора, но в ответ не
выводится.
Рис. 2.21. Запрос с вычисляемым полем, используемым в условии отбора
Предполагается, что зарплата состоит из оклада и фиксированной
премии/надбавки. Для создания этого запроса скорректируйте таблицу
«СОТРУДНИК», добавив в нее поле «ПРЕМИЯ» (рис. 2.22). Введите в это поле
данные.
Следует обратить внимание на операции над датами. Над полями с
данным типом можно производить следующие действия:
- от даты можно отнять другую дату; при этом получается число,
показывающее, на сколько дней отстоит одна дата от другой. Если вы хотите
получить интервал времени в других единицах измерения, то следует
воспользоваться функцией DateDiff.
- от даты можно отнять/прибавить число; при этом получается дата,
отстоящая от данной на заданное число дней.