Как правило, данные проще анализировать, если они разделены на группы. Например, отчет с группировкой продаж по регионам может помочь выявить тенденции, которые иначе могли бы остаться незамеченными. К тому же, поместив итоговые значения (например, суммы или средние значения) в конце каждой группы своего отчета, вы тем самым замените множество операций, выполняемых на калькуляторе.

Access упрощает работу над отчетами с группировкой. Вы можете создать простой отчет с группировкой при помощи мастера отчетов, добавить группировку или сортировку в уже созданный отчет, а также изменить уже заданные параметры группировки или сортировки.

Примечание: Статья неприменима к веб-приложениям Access - новому типу баз данных, которые создаются в Access и публикуются в Интернете.

В этой статье

Создание краткого отчета с группировкой или сортировкой

Даже если вам впервые приходится создавать отчеты с группировкой, вы можете быстро создать простой отчет, выполнив следующие действия:

Создание отчета с группировкой при помощи мастера отчетов

Мастер отчетов задает вам вопросы и на основе ответов создает отчет. В одном из них упоминаются поля, по которым нужно выполнить группировку в отчете. После создания отчета вы можете использовать его в готовом виде или изменить в соответствии со своими потребностями. Прежде чем запускать мастер отчета, определитесь с выбором источника данных.

Запуск мастера отчетов

Группировка записей при помощи мастера отчетов

Группировка позволяет упорядочить записи по группам (например, по регионам или продавцам). Вложенные группы дают возможность легко определить отношения между группами и быстро найти нужные данные. С помощью группировки вы также можете получить сводные данные, такие как итоговые значения или проценты.

Когда вы включаете в отчет несколько таблиц, мастер проверяет отношения между ними и определяет возможный способ просмотра данных.


Сортировка записей и подведение итогов по ним

Вы можете сортировать записи в порядке возрастания или убывания по 1–4 полям.


С помощью кнопок навигации в нижней части области просмотра вы можете последовательно просматривать страницы отчета или перейти к любой его странице. Нажмите одну из кнопок навигации или введите номер нужной страницы в поле ввода номера страницы, а затем нажмите клавишу ВВОД.

В режиме предварительного просмотра вы можете увеличивать масштаб, чтобы просмотреть подробности, или уменьшать его, чтобы просмотреть расположение данных на странице. Щелкните один раз, когда курсор мыши будет указывать на отчет. Чтобы отменить эффект увеличения, щелкните еще раз. Вы также можете использовать элемент управления масштабом в строке состояния.

Добавление или изменение группировки и сортировки в существующем отчете

Если у вас уже есть отчет и вам нужно добавить в него сортировку или группировку, либо вам нужно изменить в нем условия сортировки или группировки, этот раздел поможет вам в этом.

Добавление группировки, сортировки и итогов

Вы можете выполнять операции сортировки, группировки и подведения итогов, щелкнув правой кнопкой мыши поля в режиме макета, а затем выбрав в контекстном меню нужную операцию. Чтобы перейти в режим макета, щелкните правой кнопкой мыши отчет в области навигации и выберите пункт Режим макета .

Примечание: Хотя в инструкциях этого раздела не говорится прямо об области , мы советуем открыть ее и отслеживать изменения на ней в процессе работы. Вы получите более полное представление о действиях Access, а освоив работу с областью Группировка, сортировка и итоги , вы с ее помощью сможете дополнительно корректировать отчет. Чтобы отобразить панель Группировка, сортировка и итоги :

    на вкладке Конструктор в группе Группировка и итоги щелкните Группировка и сортировка .

Сортировка по одному полю

    Щелкните правой кнопкой любое значение в поле, по которому требуется выполнить сортировку.

    В контекстном меню выберите нужный вариант сортировки. Например, чтобы выполнить сортировку текстового поля по возрастанию, щелкните Сортировка от А до Я . Чтобы выполнить сортировку числового поля в убывающем порядке, щелкните Сортировка по убыванию .

Access выполняет сортировку отчета, как вы указали. Если область Группировка, сортировка и итоги уже открыта, вы можете заметить, что в поле добавилась новая строка Сортировка .

Сортировка по нескольким полям

Примечание: Когда вы применяете сортировку, щелкая поле в режиме макета, вы можете проводить сортировку лишь одного поля за раз. Применение сортировки к другому полю удаляет сортировку по первому полю. Это отличается от способа проведения сортировок в формах, где можно установить разнообразные порядки сортировки, щелкая каждое поле по очереди и выбирая нужный порядок сортировки. Чтобы создать уровни сортировки для нескольких полей, см. раздел .

Группировка по полю

    Щелкните правой кнопкой любое значение в поле, по которому требуется выполнить группировку.

    В контекстном меню выберите Группировка .

Access добавит уровень группировки и создаст заголовок группы. Если область Группировка, сортировка и итоги уже открыта, будет видно, что к полю добавилась новая строка Группировка .

Добавление итогового значения в поле

Этот параметр позволяет вычислить сумму, среднее, количество или другие статистические поля. Итоговое значение добавляется в конец отчета, а групповые итоги добавляются к группам отчета.

    Щелкните правой кнопкой любое значение в поле, по которому требуется рассчитать итоговое значение.

    Щелкните Итог .

    Выберите операцию, которую нужно выполнить: Сумма , Среднее , Число записей (чтобы посчитать все записи), Количество значений (чтобы посчитать только записи со значением данного поля), Максимум , Минимум , Стандартное отклонение или Дисперсия .

Access добавит в колонтитул отчета такой элемент управления, как вычисляемый текст, в котором подводится общий итог. Если в отчете содержатся уровни группировки, Access добавит колонтитулы групп (если их нет) и поместит итоговое значение в каждый колонтитул.

Примечание: Вы также можете добавить итоги, щелкнув поле, по которому их необходимо рассчитать, и на вкладке Конструктор в группе Группировка и итоги щелкнув Итоги .

Добавление группировки, сортировки и итогов с помощью области "Группировка, сортировка и итоги"

Работа с областью Группировка, сортировка и итоги предоставляет максимальные возможности, когда вам нужно добавить или изменить группы, порядки сортировки или параметры итогов в отчете. При этом режим макета наиболее удобен в работе, так как в нем гораздо проще просматривать, как внесенные изменения влияют на отображение данных.

Отображение области "Сортировка, группировка и итоги"

    На вкладке Конструктор в группе Группировка и итоги щелкните Группировка и сортировка .

    Access отобразит область Группировка, сортировка и итоги .

Чтобы добавить уровень группировки или сортировки, щелкнитеДобавить группировку или Добавить сортировку .

В область Группировка, сортировка и итоги будет добавлена новая строка и отобразится список доступных полей.

Вы можете щелкнуть одно из этих имен полей или выражение под списком полей, чтобы ввести выражение. Как только вы щелкните поле или введете выражение, Access добавит в отчет уровень группировки. В режиме макета немедленно отобразятся порядок сортировки или группировки.

Дополнительные сведения о создании и использовании выражений см. в статье Создание выражений .

Примечания:

    После указания нескольких уровней сортировки или группировки вам может понадобиться перейти вниз области Сортировка, группировка и итоги , чтобы увидеть кнопки Добавить группировку и Добавить сортировку .

    Вы можете назначить до десяти уровней сортировки и группировки в отчете.

Изменение параметров группировки

Каждый уровень группировки или сортировки содержит набор параметров, с помощью которых можно получить нужные результаты.


Порядок сортировки. Вы можете изменить порядок сортировки, щелкнув соответствующий раскрывающийся список и выбрав нужный параметр.

Интервал группировки. Эта настройка определяет способ группировки записей. Например, текстовые поля можно сгруппировать вместе по первому символу (если они начинаются на "А", "Б" и т. д.). Поля даты можно сгруппировать по дню, неделе, месяцу, кварталу или ввести свой интервал.

Итоги. Чтобы добавить итоги, щелкните этот параметр. Вы можете добавить итоги к нескольким полям, а также рассчитать несколько типов итоговых значений для одного поля.

    Итог по полю и выберите поле, по которому нужно рассчитать итоговые значения.

    Щелкните стрелку раскрывающегося списка Тип и выберите способ расчета.

    Выберите Показать общий итог , чтобы добавить общий итог в конец отчета (его колонтитул).

    Выберите Показать итоги групп и общий итог , чтобы добавить в колонтитул групп элемент управления, рассчитывающий процент общего итога для каждой группы.

    Выберите Показать в заголовке группы или Показать в колонтитуле группы , чтобы отобразить общий итог в нужном месте.

После выбора всех параметров для поля вы можете повторить процесс, выбрав другое поле из раскрывающегося списка Итог по полю , или щелкнуть за пределами всплывающего окна Итоги , чтобы закрыть его.

Название. Позволяет вам изменить заголовок поля, по которому вычисляется итоговое значение. Используется для заголовка столбца и для итоговых полей в заголовках и колонтитулах.

Чтобы добавить или изменить заголовок:

    щелкните голубой текст после надписи с заголовком ;

    появится диалоговое окно Масштаб ;

    введите новый заголовок в диалоговом окне, а затем нажмите ОК .

С разделом/без раздела заголовка. С помощью этой настройки вы сможете добавить или удалить раздел заголовка, который находится перед каждой группой. При добавлении раздела заголовка Access помещает поле группировки в заголовок. Прежде чем удалить раздел заголовка, который содержит элементы управления, отличающиеся от поля группировки, Access попросит вас о подтверждении.

С разделом/без раздела примечания. Используйте этот параметр, чтобы добавить или удалить раздел колонтитулов после каждой группы. Прежде чем удалить раздел колонтитулов, содержащий элементы управления, Access попросит вас о подтверждении.

Неразрывное представление группы. Этот параметр определяет, как группы располагаются на странице при печати отчета. Вам может понадобиться расположить группы как можно ближе друг к другу для их удобного просмотра на странице. Но это обычно увеличивает расход бумаги при распечатке отчета, потому что на большинстве страниц будет пустое место внизу.

    Не удерживать группу на одной странице. Используйте этот параметр, если вам не важно расположение групп при разрыве страниц. Например, 10 элементов группы из 30 элементов могут располагаться внизу одной страницы и остальные 20 вверху следующей страницы.

    Удерживать группу на одной странице. Этот параметр помогает свести к минимуму число разрывов страниц в группе. Если группа не помещается на оставшемся месте одной страницы, Access оставляет это место пустым и размещает группу на следующей странице. Большие группы все же могут располагаться на нескольких страницах, но этот параметр сводит такие случаи к минимуму.

    Удерживать заголовок и первую запись на одной странице. Следит за тем, чтобы заголовок группы не распечатывался отдельно от самой группы в нижней части страницы. Если Access определит, что места недостаточно для печати хотя бы одной строки после заголовка, группа будет распечатана со следующей страницы.

Изменение приоритета уровней группировки и сортировки

Чтобы изменить приоритет, щелкните строку в области Группировка, сортировка и итоги , а затем стрелку вверх или вниз справа строки.

Удаление уровней группировки и сортировки

Чтобы удалить уровень, в области Группировка, сортировка и итоги выберите строку, которую вы хотите удалить, а затем нажмите клавишу DELETE или кнопку Удалить справа от строки. При удалении уровня группировки, если заголовок группы или колонтитул содержали поле группировки, Access переместит его в раздел подробностей отчета. Все другие элементы управления удаляются.

Создание сводного отчета (без сведений о записях)

Если вы хотите показать только итоги (данные в строках заголовка и колонтитулов), на вкладке Конструктор в группе Группировка и итоги щелкните Скрыть подробности . Тем самым вы скроете записи следующего нижнего уровня группировки, и итоговые данные будут отображаться более компактно. Несмотря на то, что записи скрыты, элементы управления в скрытом разделе не удаляются. Щелкните Скрыть подробности еще раз, чтобы вернуть строки подробностей в отчет.

Запрос позволяет для данных, относящихся к одинаковым группам, подводить итоги: подсчитывать их количество, сумму, среднее, максимальное и минимальное значение.

Задание : создать запрос, который будет подсчитывать общее количество наименований и суммарный объем товаров, поступивших по каждой накладной.

Рассмотрим данные таблицы "Поступление товаров" (рис.13). В таблице одинаковые значения столбца Номер накладной могут повторяться многократно (в зависимости от того, сколько товаров поступило по накладной). Необходимо создать запрос, который будет для накладных с одинаковым номером суммировать количество товара.

Для лучшего понимания того, какой результат должен получиться в запросе на рис. 13, справа, фигурными скобками, выделены записи, для которых номера накладных совпадают и рассчитано общее количество наименований и суммарный объем.

Рис. 13. Таблица "Поступление товаров"

Порядок работы:

1. В Окне навигации выбирается Категория объекта - Тип объекта , а в разделе Фильтр по группам устанавливается переключатель Запросы . На ленте в разделе Создание в группе Запросы нажимается кнопка Конструктор Запросов .

2. В диалоговом окне Добавление таблиц , выделяются таблицы, данные из которых требуется отобразить в запросе ("Поступление товаров" ) и нажимается кнопка Добавить .

3. На экране отобразится окно конструктора запроса, состоящее из двух частей: в верхней части отображены макеты таблиц, а в нижней - раздел для определения параметров запроса.

В раздел параметров запроса добавляются те поля, значения которых должны быть отображены в результате выполнения запроса (рис.14). (Добавить поле в запрос можно двойным щелчком по его названию в соответствующей таблице, расположенной в верхней части окна запроса).

5. Для реализации запроса в режиме Конструктора добавляется дополнительная строка Групповые операции (рис.14) нажатием на панели инструментов кнопки.

Под полем № накладной в строке Групповые операции выбирается команда Группировка (накладные с одинаковым номером группируются), под полем Код товара в строке Групповые операции выбирается команда Count (количество), а под полем Количество - команда Sum (количество суммируется). Операции, используемые в запросе на группировку, описаны в табл.2.

Результат выполнения запроса представлен на рис. 15. (сравните результат с данными рис. 13).


Таблица 2. Групповые операции

Название операции

Значение

Суммирование

Среднее значение

Минимальное значение

Максимальное значение

Количество элементов в столбце

Последний элемент

Первый элемент

Условие

Указывает на логическое выражение

Выражение

Указывает на то, что поле вычисляемое

6.1. Вычисляемые поля.

6.2. Создание выражений с помощью Построителя выражений.

6.3. Обзор встроенных функций СУБД MS Access.

6.4. Итоговые запросы.

6.5. Перекрестные запросы.

Очень часто при формировании набора записей требуется произвести вычисления над данными (определить возраст сотрудника, стоимость заказа, процент от продаж, выделить часть номенклатурного кода и т. п., т. е. вывести информацию, которая не хранится в базе данных) или выполнить определенные операции по непосредственной обработке отбираемых данных.

В QBE СУБД MS Access такие возможности предоставляются через вычисляемые поля и групповые операции.

6.1. Вычисляемые поля

Вычисляемое поле представляет собой выражение, состоящее из операторов (арифметических, сравнения, логических, конкатенации) и операндов. В качестве операндов могут быть использованы константы, встроенные или определенные пользователем функции и идентификаторы, например

Стоимость: Товары! Цена * Количество * (1-Скидка)

КоличествоМужчин: Sum(IIf(Пол = "м"; 1; 0))

ФИО: Фамилия &" "& Left(Имя;1) &". "& Left(Отчество;1) &"."

Стоимость, КоличествоМужчин и ФИО являются именами вычисляемых полей и отображаются в режиме таблицы в заголовке столбца, символ двоеточие исполняет роль разделителя между именем вычисляемого поля и выражением.

Если имя таблицы или поля содержит пробелы, то его идентификатор обязан в выражении заключаться в квадратные скобки, например

Стоимость: Цена*[Количество товара]

Вычисляемое поле создается прямо в бланке QBE путем внесения выражения в ячейку Поле любого свободного столбца. Результаты вычислений, выводящиеся в поле, не запоминаются в базовой таблице. Вычисления снова производятся всякий раз, когда выполняется запрос, поэтому результаты всегда представляют текущее содержимое базы данных.

Обновить вычисленные результаты вручную невозможно.

Для построения сложных выражений в СУБД MS Access входит утилита, называемая Построитель выражений.

6.2. Создание выражений с помощью Построителя выражений

Построитель выражений можно запустить щелкнув по клавише Построить на панели инструментов Конструктор запросов или выбрав в контекстном меню поля бланка запроса QBE команду меню Построить… .

Рис.6.2. Диалоговое окно Построителя выражений
со сформированным выражением

6.3. Обзор встроенных функций СУБД MS Access

СУБД MS Access содержит более 100 встроенных функций (рис.6.3), которые можно использовать при формировании вычисляемого поля или при задании условия отбора.

Возвращает значение дня месяца от 1 до 31

Возвращает значение месяца от 1 до 12

MonthName(месяц[; флаг])

Возвращает название месяца соответствующего номеру месяца: 1 – январь, 2 – февраль, и т. д. Если значение аргумента флаг Истина, то функция возвращает аббревиатуру месяца: 1 – янв, 2 – фев и т. д.

Возвращает значение года от 100 до 9999

Weekday(дата[; число])

Если аргумент число не указан, возвращает значение дня недели от 1 (воскресенье) до 7 (суббота). Если аргумент число имеет значение 0, то возвращает значение дня недели от 1 (понедельник) до 7 (воскресенье)

Возвращает целое число от 0 од 23, представляющее значение часа

DatePart(интервал; дата)

Возвращает числовое значение в зависимости от значения аргумента интервал:

"q" – квартал (от 1 до 4);

"m" – месяц (от 1 до 12);

"yyyy" – год (от 100 до 9999);

"ww" – неделя (от 1 до 53);

и т. п. (см. справку по функции).

Возвращает текущую системную дату

Продолжение таблицы 6.1

Описание

Left(текст; n)

Возвращает n левых символов аргумента текст

Right(текст; n)

Возвращает n правых символов аргумента текст

Mid(текст; нач_поз[; n])

Возвращает n символов начиная с позиции нач_поз аргумента текст. Если аргумент n не указан, то возвращает все символы до конца строки начиная с позиции нач_поз аргумента текст.

Возвращает количество символов (длину строки) в аргументе текст

LTrim(текст)

Возвращает строковое значение аргумента текст без начальных пробелов

RTrim(текст)

Возвращает строковое значение аргумента текст без заключительных пробелов

Trim(текст)

Возвращает строковое значение аргумента текст без начальных и заключительных пробелов

Возвращает строковое значение аргумента число

Format(переменная; формат)

Возвращает значение аргумента переменная в формате заданным аргументом формат

6.3. Итоговые запросы

При анализе данных очень часто интересуют не отдельные записи, а итоговые значения по группам данных, например:

Количество сделок с Партнерами за определенный промежуток времени;

Средний объем продаж по каждому месяцу за предыдущий год.

Ответы на такие вопросы дает итоговый запрос.

Для вычисления итоговых значений необходимо нажать кнопку Групповые операции на панели инструментов Конструктор запросов , чтобы в бланке QBE появилась строка Групповая операция (после имени таблицы).

По умолчанию для каждого поля, занесенного в бланк запроса, устанавливается значение Группировка (итоги не подводятся).

Для подведения итогов необходимо заменить установку Группировка на конкретную итоговую функцию. В СУБД MS Access предусмотрено 9 функций (табл. 6.2), обеспечивающих выполнение групповых операций.

Таблица 6.2

Назначение

Возвращает сумму набора значений

Возвращает среднее арифметическое набора значений

Возвращает наименьшее значение из набора значений

Возвращает наибольшее значение из набора значений

Возвращает количество записей в наборе значений отличных от Null

Возвращает первое значение поля в группе

Возвращает последнее значение поля в группе

Возвращает среднеквадратичное отклонение набора значений

Возвращает дисперсию набора значений

Групповая операция имеется установка Выражение . Данная установка применяется, когда в выражении (строка Поле ) используется несколько итоговых функций.

В раскрывающемся списке строки Групповая операция имеется установка Условие . Данная установка применяется, когда в строке Условие отбора записано условие выборки, но данные столбца (поля) не должны участвовать в групповой операции.

Для решения более сложных статистических задач в СУБД MS Access предусмотрен специальный тип запроса – перекрестный запросов.

6.4. Перекрестные запросы

Перекрестный запрос – это специальный тип группового запроса, в котором отражаются результаты статистических расчетов по значению одного поля таблицы.

Для построения перекрестного запроса достаточно трех полей базового источника. По повторяющимся значениям одного поля формируются названия заголовков строк итоговой (сводной) таблицы (рис.6.4). По повторяющимся значениям другого поля формируются названия заголовков столбцов итоговой (сводной) таблицы. Результаты статистической обработки по третьему полю отображаются в ячейках сводной таблицы (область значений). Пример перекрестного запроса в режиме конструктора представлен на рис.6.5, а результаты выполнения запроса на рис. 6.6.

В области заголовков строк допускается размещение нескольких полей, в то время как в других областях может размещаться только по одному полю.

В перекрестном запросе допускается указание условий отбора. Сортировка может проводиться только по полям, размещенным в области заголовков строк.

Рис.6.4. Макет перекрестной таблицы


Рис.6.5. Сформированный перекрестный запрос в QBE


Рис.6.6. Результат выполнения запроса в режиме Таблицы

Запросы позволяют не только выбирать записи из таблиц Access, но и вычислять различные статистические параметры. Например, можно подсчитать суммарное количество контактов и вывести даты первого и последнего контакта с каждым из людей, включенных в таблицу Контакты. Чтобы построить такой запрос в режиме конструктора, выполните следующие действия.

1. В окне базы данных щелкните на кнопке Запросы .

2. Дважды щелкните на значке Создание запроса в режиме конструктора .

3. В открывшемся окне диалога (рис. 17.6) выделите строку Контакты.

4. Щелчком на кнопке Добавить добавьте выбранную таблицу в верхнюю область конструктора запроса.

5. Выделите пункт Список и снова щелкните на кнопке Добавить .

6. Щелчком на кнопке Закрыть закройте окно диалога . Списки полей двух таблиц, соединенные линией связи, появятся в окне конструктора.

7. Щелкните на кнопке Групповые операции панели инструментов. В бланке запроса появится дополнительная строка Групповая операция , позволяющая выполнять статистические операции со значениями конкретных полей.

Рис. 17.6 . Добавление таблицы

8. Перетащите поле Фамилия в ячейку Поле первого столбца конструктора.

9. В ту же ячейку второго столбца перетащите поле Имя таблицы Контакты.

10. В третий, четвертый и пятый столбцы бланка запроса перетащите поле Дата таблицы Список (рис. 17.7).

11. В раскрывающемся списке ячейки Групповая операция третьего столб ца бланка запроса выберите пункт Min .

12. В той же ячейке четвертого столбца выберите пункт Мах .

13. В пятом столбце задайте групповую операцию Count. Групповые операции построенного запроса обработают все записи таблицы Список, соответствующие конкретному человеку из таблицы Контакты, и вместо самих данных таблицы Список выведут в соответствующее поле результата запроса только значение величины, вычисляемой по определенной формуле. Доступные групповые операции перечислены в табл. 17.1.

ТАБЛИЦА 17.1 . Групповые операции

Название Функция
Условие Режим задания условия отбора для поля, но которому не выполняется группировка. Access автоматически делает такое поле скрытым
Выражение Вычисляемое поле, значение которого рассчитывается по сложной формуле
Group By Поле, определяющее группу записей, по которой вычисляются статистические параметры. К одной группе относятся все записи, для которых значения поля с режимом Group By (Группировка) одинаковы
Last Последнее значение в группе
First Первое значение в группе
Var Вариация значений поля
StDev Стандартное отклонение величин ноля от среднего
Count Количество записей, соответствующее ноле которых не содержит величины Null
Мах Максимальное значение
Min Минимальное значение
Avg Среднее значение поля
Sum Сумма значений поля по всем записям

Примечание Поскольку в пятом поле запроса вычисляется количество записей, в ячейку Поле этого столбца можно поместить любое поле таблицы Список.

14. Щелкните на кнопке Вид , чтобы выполнить запрос. Появится таблица с пятью столбцами. Два первых столбца содержат фамилии и имена людей. По ним выполняется группировка, то есть расчет значений остальных полей запроса выполняется для записей таблицы Список, сопоставляемых с одним человеком. Как уже говорилось выше, соответствие контакта таблицы Список и человека из таблицы Контакты определяется полями Код_Контакты, с помощью которых осуществляется связь этих двух таблиц. Третий и четвертый столбцы запроса выводят соответственно дату первого (функция Min) и последнего (функция Мах) контакта с данным человеком. Пятый столбец содержит количество записей в таблице Список (функция Count), соответствующих. данному человеку, то есть число контактов с ним. Единственный недостаток построенного запроса - это непонятные имена столбцов. Давайте скорректируем их.

15. Щелчком на кнопке Вид вернитесь в конструктор запроса.

16. В ячейке Поле третьего столбца замените имя Дата на текст Дата первого контакта: Дата. Правая часть этого выражения, расположенная правее двоеточия, по-прежнему задает имя поля, а левая определяет название столбца результата запроса. Таким образом, любому столбцу запроса можно назначить произвольное имя.

17. В ячейке Поле четвертого столбца введите Дата последнего контакта: Дата.

18. В первой строке пятого столбца бланка запроса введите Число контактов: Дата.

Примечание К сожалению, подобный прием не подходит для смены названия поля, значение которого не вычисляется, а передается из таблицы. То есть таким способом не удастся переименовать поле Имя.

19. Снова щелкните на кнопке Вид .

20. Закройте запрос.

21. Для сохранения изменений структуры щелкните на кнопке Да .

22. В окне диалога Сохранение введите имя Итоговый запрос и щелкните на кнопке ОК .

Сегодня мы подробно поговорим о запросах в Access.


Запросы, как вы уже знаете, нужны для работы с данными, находящимися в таблицах.
Чтобы создать запрос…
1) …в окне базы данных открываете Запросы
2) …и создаете запрос с помощью конструктора.



Пожалуйста, НЕ пользуйтесь для создания запросов Мастером , потому что он позволяет делать только самые простые запросы, а переделывать их потом в более продвинутые даже сложнее, чем создать запрос в конструкторе «с нуля».

Отсев пустых строк

Когда связываются несколько таблиц, то могут возникать пустые строки.



Почему это происходит?
Дело в том, что у нас в таблице tbPerson наряду с владельцами собак записаны и судьи (Петровская, Елец, Терещук). Судьи не имеют права привозить своих собак на выставку, поэтому в строках с их фамилиями пустые ячейки с кличками собак.
Есть два способа удалить пустые строки.
1. Поставить условие на значение клички собаки Is not Null , т.е. НЕ ПУСТА.



2. Или поменять тип связи между таблицами в области таблиц: нужно на линии связи, дающей неточный результат, вызвать контекстное меню, и поменять Параметры объединения .



Вопрос вам: какие настройки нужно поменять в диалоговом окне параметров объединения?

Запросы с вычислениями

До сих пор мы только отбирали записи по различным условиям. Но Access позволяет не только просматривать данные, записанные в таблицах, но и производить ВЫЧИСЛЕНИЯ: по дате рождения определять возраст; из имени, фамилии и отчества делать фамилию с инициалами; по цене единицы товара и его количества определять общую стоимость покупки; по дате выдачи книги в библиотеке определять величину штрафа при задолженности и многое другое. Для вычислений используются встроенные функции (похожие на те, что есть в Excel).


Простейшая операция – это сложение строк . Напишем в ячейке выражение для вывода такой фразы: владелец из города город .
Для этого запишем в верхней строке нового столбца области условий: + “ из города ” + .



Имена полей записываются в квадратных скобках, фрагменты строк – в кавычках, между ними стоят знаки сложения.


Выражения для вычислений записываются в самой верхней строке (Поле ) области условий. До сих пор мы писали условия в нижних строках (Условия отбора ).


Чтобы вам не запутаться: в верхней строке мы пишем, ЧТО выводить на экран, а затем (в нижней) – при КАКОМ УСЛОВИИ .


Задание : Напишите выражение для вывода в одной ячейке фамилии владельца и в скобках города, в котором он живет. Вот так: Иванов (Москва) . Город и фамилия должны подставляться из таблицы.

Построитель выражений

Чтобы удобнее было редактировать выражения, существует специальный редактор – «Построитель выражений». Он выглядит так:



И вызывается с помощью контекстного меню: нужно поставить курсор на ту ячейку, куда вы будете записывать выражение:



В построителе выражений вы можете выбирать из библиотеки функции:



и данные из таблиц (можно пользоваться ТОЛЬКО теми таблицами, которые используются в данном запросе и отображены в области данных):



Когда вы двойным щелчком мыши выбираете из списка имя поля или функцию, Access часто вставляет еще слово «выражение», показывая, что НА ЭТО МЕСТО можно вставить другие функции и имена полей. Не забывайте удалять лишние слова «выражение»!


Мы познакомимся с текстовыми и временными функциями, а также с условным оператором Iif(condition; if-true; if-false).


Текстовые функции позволяют преобразовывать строковые переменные:
Left(«Иванов»; 2) = «Ив» оставляет n левых символов
LCase(«Иванов») = иванов делает все буквы строчными
InStr(1; «Иванов»; «но») = 4 находит подстроку (третий аргумент) в строке (второй аргумент), и равняется позиции (от начала) подстроки в строке
Len («Иванов») = 6 выводит количество символов в строке
StrComp(«Иванов»; «Петров») = -1 сравнивает две строки: если они равны, то выдает 0
и другие…


Временные позволяют работать с временными переменными:
Month(#12.04.2007#) = 4
Year(#12.04.2007#) = 2007
Day(#12.04.2007#) = 12.
Now() = 28.04.2008 14:15:42 (текущие дата и время)
Date() = 28.04.2008 (сегодняшняя дата)
DateDiff(«d»; #12.04.2007#; #28.04.2007#) = 16 находит разницу между двумя датами («d» – в днях, “ww”- в неделях, “m” – в месяцах, “yyyy” – в годах и др.)
и другие…


Логические обрабатывают условные выражения:
Iif(<=1; «щенок»; «взрослый») аналог функции ЕСЛИ из Ecxel.
и другие…


Задание : напишите выражение, которое из фамилии, имени и отчества делает фамилию с инициалами. Иванов Иван Иванович -> Иванов И.И.
Задание
Задание
Дополнение : Есть два способа вычислить возраст собаки: один более точный, другой менее:
1) из текущего года вычесть год рождения собаки;
2) с помощью функции DateDiff посчитать, сколько дней прошло с рождения до сегодняшнего дня. Примените в одном из заданий один способ, в другом – другой.

Запросы с параметром

Когда вы запускаете запрос с параметром , он, в отличие от обычного запроса на выборку, не выполняется сразу, а сначала в диалоговом окне просит вас уточнить некоторые условия отбора. Например, мы хотим получить полную информацию о собаке с определенным турнирным номером.



Устроен этот запрос так:



На том месте, где обычно стоит условие отбора, теперь записан вопрос (в квадратных скобках), который будет задан пользователю. А ответ пользователя, как вы уже догадались, будет подставлен в эту ячейку в качестве условия отбора.


Задание : создайте запрос, который будет выводить всех собак по фамилии владельца, являющейся свободным параметром.

Запросы с группировкой

С помощью построителей выражений мы можем производить операции над одной строкой: складывать значения в ячейках, преобразовывать данные.
Но что, если нам надо обработать сразу несколько строк: посчитать сумму баллов, найти количество строк с одинаковым значением заданного поля?
Для этого используется группировка (она очень похожа на подведение итогов в Excel).


Посчитаем, сколько собак каждой породы приехали на выставку. Для этого перебросим в область условий всего два поля: кличка и порода – и вызовем дополнительную строку групповые операции (через контекстное меню на области условий):



Теперь сгруппируем собак по породе и посчитаем количество разных кличек в каждой группе:



Подведем итоги выставки и посчитаем средний балл за экстерьер, средний балл за дрессировку и их сумму.


Добавляем в область таблиц таблицу с оценками (tbMarks). Группируем оценки по турнирному номеру собаки и среди групповых операций выбираем среднее значение Avg (от англ. average – среднее).


Выполните запрос и в режиме просмотра обратите внимание, что столбцы с групповыми операциями имеют двойное название (операция + имя поля). Нам это пригодится при подсчете суммы баллов.





Можно также округлить значения до одного знака после запятой: Round(+;1)


Задание : выясните, какая собака вызвала наиболее противоречивые мнения судей. Для этого надо из максимального балла вычесть минимальный.

Запросы на изменение, удаление, добавление

На первом уроке мы уже говорили о том, что запросы позволяют не только просматривать данные из таблиц, но и редактировать записи: добавлять новые, удалять, изменять. Тип запроса можно изменить с помощью списка запросов на панели инструментов.



Оператору базы данных накануне выставки пришла новая информация:
1) собака Дези заболела и не сможет принять участия в выставке;
2) по ошибке Гардиен, являющийся на самом деле английским сеттером, был указан как ирландский сеттер;
3) владелец Мигунова подала заявку на участие в выставке еще одной своей собаки (кличка: Гарри, порода: сеттер-гордон, пол: м, дата рождения: 15.09.07).


Приступим к редактированию базы данных.
1) Удалить запись с Дези.
Создаем запрос quDelDog. Тип запроса – на удаление. Со сменой типа запроса несколько изменяется и область условий. Появилась новая ячейка Удаление . Под ней вы указываете условие, по которому нужно отобрать записи, подлежащие удалению. Даже если вы указываете условие отбора для одного поля, удалена будет ВСЯ запись.



После того, как вы нажали на «восклицательный знак», на экране появится сообщение о том, что запись удалена. Теперь откройте таблицу tbDog и убедитесь, что Дези в ней нет.


2) У Гардиена изменить ирландский сеттер на английский сеттер.
Создаем запрос quUpdateDog. Тип запроса – на обновление. Находим Гардиена и обновляем у него породу.



Откройте таблицу tbDog и убедитесь, что у Гардиена порода – английский сеттер.


3) Добавить запись с Гарри.
Создаем запрос quAddDog. Тип запроса – на добавление. У запросов на добавление есть одна особенность: в области таблиц отображены НЕ те таблицы, КУДА вы добавляете запись, а ОТКУДА вы берете данные (если это требуется). Целевую таблицу (в которую добавляются записи) вы указываете в диалоговом окне, которое появляется сразу, как только вы установите тип запроса (на добавление):



Поскольку мы не берем данные из других таблиц, а создаем новую запись, то область таблиц должна быть ПУСТОЙ! (там не должно быть ни одной таблицы). В области условий в строке Поле вы пишете, ЧТО добавить (новое значение для каждого поля), а в строке Добавление КУДА (имена полей):



Откройте таблицу tbDog и убедитесь, что Гарри в ней появился!

Язык запросов SQL

Когда вы нажимаете на «восклицательный знак», запрос выполняется. Так это представляется на взгляд новичка.
Профессионалы знают, что на самом деле в этот момент выполняется инструкция на специальном языке запросов SQL. Дело в том, что Access – не единственная система управления базами данных (СУБД). Может быть, вы слышали о таких СУБД в Интернете как MySQL, FreeBSD??? Access просто предлагает очень удобный интерфейс для работы с БД, а в других СУ нет никакой кнопочки с восклицательным знаком. Зато там обязательно есть специальное окошко, в котором можно писать SQL-инструкции.
Access тоже позволяет редактировать запросы в режиме SQL-инструкций:



Правила языка SQL не так сложны. Вы можете сами в этом убедиться! Сделайте простой запрос на выборку (например, выведите кличку, породу и дату рождения собаки по кличке Гарри). Теперь откройте запрос на поиск Гарри в режиме SQL!
Инструкция устроена очень просто:
SELECT поле1, поле2,…
FROM таблица1, таблица2,…
WHERE условие1, условие2,…


Откройте теперь запросы на обновление, изменение, удаление (quDelDog, quUpdateDog, quAddDog) в режиме SQL и выпишите на листе бумаги шаблоны их SQL-инструкций (как это только что было сделано для запроса на выборку).


Запросы с параметром, запросы на группировку, запросы с вычислениями представляют собой такие же SQL-запросы, но только с несколько более сложными условиями отбора. Язык SQL – незаменимый инструмент для тех, кто работает с базами данных!

Задания

Вот те темы, которые мы рассмотрели:
- простые и составные условия отбора
- оператор LIKE
- выборка из нескольких таблиц
- построитель выражений
- запросы с параметром
- запросы на группировку
- запросы на обновление, добавление, удаление
- язык запросов SQL.


Их немало! Но, коль скоро вы их освоили, вы сможете отыскать в базе данных любую информацию.


Проверьте свои знания! Выполните в вашей базе данных следующие запросы (или переименуйте уже выполненные так, чтобы их имена совпадали с именами задач):

1. выборка

quSelectDog : Найдите всех шар-пеев и сеттеров-гордонов из регионов (НЕ из Москвы); используйте оператор «не равно».

2. оператор Like

quLike : Найдите всех абонентов МТС (те, у кого номер мобильного телефона начинается с 8(916)…).

3. выражения

quEvalText : Напишите выражение, которое из фамилии, имени и отчества делает фамилию с инициалами. Иванов Иван Иванович -> Иванов И.И.
quEvalDate : напишите выражение, которое вычисляет, сколько собаке лет по дате ее рождения.
quEvalIif : напишите выражение, которое определяет по возрасту, в какой возрастной категории выступает собака: «щенок» - до года; «юниор» - от года до двух лет; «сеньор» - старше двух лет.
Дополнение : Примените в одном задании один способ вычислить возраст собаки, в другом – другой: 1) из текущего года вычесть год рождения собаки; 2) с помощью функции DateDiff посчитать, сколько дней прошло с рождения до сегодняшнего дня.

4. параметр

quParametre : Создайте запрос, который будет выводить всех собак по фамилии владельца, являющейся свободным параметром.

5. группировка

quGroup : Выясните, какая собака вызвала наиболее противоречивые мнения судей.

6. редактирование БД

Незадолго до выставки владелец Гороховец уехал на ПМЖ (постоянное место жительства) в Германию и передал всех собак своему другу Карпову Михаилу Игоревичу. Требуется:
1) quAddOwner : добавить запись о новом владельце;
2) quUpdateOwner : изменить у собак Гороховца ID владельца на ID Карпова;
3) quDelOwner : удалить Гороховца из базы данных.


Жду ваших БД с выполненными заданиями, а также шаблоны SQL-инструкций для запросов на обновление, изменение, удаление.