Перекрестные запросы
ЛЕКЦИЯ 10. ПЕРЕКРЕСТНЫЕ ЗАПРОСЫ
Перекрестными называется итоговый запрос, представленный в виде электронной таблицы.
Например, мы хотим получить запрос, вычисляющий итоговые суммы (столбцы) продаж по месяцам для каждого вида изделий (строки).
Для этого мы должны сделать запрос (вкладка Запросы/Создать/Конструктор) и изменить тип запроса на перекрестный запрос.
Поле | Код товара | Дата продажи | Продано |
Имя таблицы | Рекомендуемые материалыFREE Стили. Оглавления. Перекрестные ссылки FREE Продвижение сайта: запросы ЛР S16 ЛР2- 22Р (граф Ашкинузе) Отчет + код 5 lab 3 lab вариант 13 Заказано | Заказы | Заказы |
Гр. Операции | Группировка | Группировка | Sum |
Перекрестная таблица | Заголовок строки | Заголовок столбца | Значения |
Сортировка | По возрастанию | ||
Условие |
В строке Перекрестная таблица можно выбрать одну из четырех установок:
ü заголовки строк
ü заголовки столбцов
ü значение (выводится в ячейках таблицы)
ü не выводить (предназначена для ввода условий отбора)
Результаты выполнения данного запроса будет таблица ниже:
Код товара | 3.01.00 | 5.01.00 | 2.02.00 | 4.03.00 | 10.01.00 |
124 | 45 | 10 | 15 | 20 | |
125 | 96 | ||||
126 | 5 | 15 | 18 | 21 |
Можно в строке Условие поле Дата продажи ввести *.03.*, тогда таблица будет состоять из заголовков строк и двух столбцов (04.03.00 10.03.00).
Пусть нас интересует суммарное значение по каждому месяцу.
Тогда, вместо поля [Дата продажи], в качестве заголовка столбцов необходимо ввести вычисляемое поле.
Format ([Заказы][Дата продажи];”mmm-yyyy”)
Данная функция одновременно определяет
- формат ввода даты:
mmm – месяц апрель, май, июнь
mmmm – полное название месяца
уу – год 00, 99
уууу – год 1999, 2000
- уровень группировки.
Например:
- если в данной функции ввести format ([Дата продажи];”dd-mmmm-yyyy”), то группировка будет выполняться по дням (так же как получилось в первоначальном варианте запроса);
- если ввести Format ([Дата продажи];”уууу”), то будут суммироваться продажи по каждому товару за год.
В нашем варианте запрос будет иметь вид:
Код товара | Январь- 00 | Декабрь - 00 | Март – 00 |
124 | 45 | 10 | 35 |
125 | 96 | ||
126 | 20 | 18 | 21 |
Положения строк и столбцов в запросе можно изменять.
Если мы хотим указать, что данный запрос отражает только те заказы, которые выполнены (то есть [Заказано]=[Продано]), то в бланк запроса нужно добавить поле Заказано дважды (для поля, являющегося Значением перекрестной таблицы, Условие отбора задавать нельзя). В повторно добавленном с запрос поле Заказано в строке Перекрестная таблица нужно выбрать режим (не отображаются), так в строке Условие - [Заказано]=[Продано]. Тогда на экран выведутся только те товары, по которым выполняются заказы.
1) ЛЕКЦИЯ 10. МОДИФИКАЦИЯ ДАННЫХ С ПОМОЩЬЮ ЗАПРОСОВ-ДЕЙСТВИЙ
Работая в режиме таблицы или формы, мы умеем удалять или добавлять одну или несколько записей. Однако если нужно удалить, изменить по определенному признаку или добавить большое количество записей, удобно пользоваться запросами-действиями.
Существует четыре типа модифицирующих запросов, но только три из них выполняют действия над записями таблицы:
ü запросы создания таблиц;
ü запросы удаления;
ü запросы добавления;
ü запросы обновления.
Прежде чем выполнить какие-либо модификации, имеет смысл создать запрос-выборку, использовать условия выбора, позволяющие выбрать те записи, которые мы собираемся обновить. Когда мы убедимся в том, что условия сформулированы верно, очень просто запрос-выборку преобразовать в запрос-действие.
Запрос на удаление
Например, мы хотим удалить из таблицы все Заказы, совершенные до 1 апреля 1999 года. Для этого необходимо:
1) Создать резервную копию таблицы Заказы. Для этого, находясь во вкладке Таблицы базы данных, нужно выделить таблицу Заказы и нажить кнопку Копировать. Затем, не выходя из данной вкладки, нажать кнопку Вставить. После этого появится окно, предлагающее ввести имя новой таблицы:
ОК Параметры вставки О только структура О структура и данные О добавление данных в таблицу |
Напишем, например, имя Временная.
2) Далее следует перейти во вкладку Запросы и открыть окно Конструктора запросов. В окне Добавление таблицы добавить таблицу Заказы.
3) В бланке запроса добавить все поля таблицы Заказы (знак *, находящийся в верхней части списка полей таблицы), а затем отдельно поля Дата заказа, задать условие: <#01.04.99#.
4) Проверить выполнение запроса, убедившись, что условие задано верно (кнопка Вид).
5) Выполнить преобразование запроса-выборки в запрос-действие. Для этого необходимо вызвать пункт меню Запрос или кнопку Тип запроса:
Выборка Перекрестный Создание таблицы Обновление Добавление Удаление |
Выбрать режим Удаление, после чего бланк запроса изменит свой вид:
Поле | Заказы. * | Дата заказа |
Имя таблицы | Заказы | Заказы |
Удаление | Из | Условие |
Условие отбора | <#01.04.99# |
6) Запустить запрос с помощью кнопки !. Будет выдано сообщение о том, сколько строк будет удалено.
При удалении необходимо внимательно следить за выбранными данными. Причем, если при создании связей был установлен режим Каскадного удаления связанных данных, то, если будет удаляться Клиент, то все сведения о выполненных с ним сделках также будут удаляться. Если записи удаляются из базы данных в режиме таблицы вручную, то Access выдаст сообщение о возможности удаления данных в других таблицах, а при использовании Запроса на удаление будет только выделана информация о количестве удаленных записей.
Выполнение запроса-обновления
Запросы-обновления позволяют изменить значение выбранного поля по всем записям таблицы, удовлетворяющим определенным условиям.
Например, есть таблица:
Поставляемые товары
Код предприятия Код товара Минимальная партия Цена |
Предположим, что предприятие 1 решило увеличить на 10% цены на товары 1 и 3. Нам необходимо скорректировать цену на указанные изделия в таблице.
Для этого:
1) добавляем в окно Конструктора нового запроса таблицу Поставляемые товары;
2) выбираем команду Запрос/Обновление;
3) создаем следующий бланк запроса:
Поле | Цена | Код товара | Код предприятия |
Имя таблицы | Поставляемые товары | Пост.товар | Пост.товар |
Обновление | [пост.товар]![цена]*1,1 | ||
Условие отбора | 1 or 3 | 1 |
4) переходим в режим таблицы для просмотра правильности заданной выборки (цены, которые мы видим в режиме таблицы, не являются измененными ценами);
5) вернувшись в режим Конструктора запросов, нажимаем кнопку Запуск (!).
С помощью запроса-обновления за один раз можно изменить значения нескольких полей. Кроме того, для вычисления новых значений одних полей можно использовать значения других полей.
Пример 1
В таблице Заказы для записей, данные продажи которых датируются сегодняшним числом, а значение поля Продано равно 0, установить значение поля Заказано.
Бланк запроса на обновление в данном случае будет выглядеть следующим образом:
Поле | Продано | Дата продажи |
Имя таблицы | Заказы | Заказы |
Обновление | [Заказы!] [Заказано] | |
Условие | 0 | Date() |
Пример 2
В базе данных Телефонно-адресная книга должна содержаться информация о фактических и юридических адресах предприятий. Для предприятий, в которых отсутствуют фактические адреса, необходимо переместить значение юридического адреса в поле фактического адреса. Тогда Бланк запроса на обновление будет выглядеть так:
Поле | Адреса | Юридические адреса |
Имя таблицы | Телефонно-адресная книга | Телефонно-адресная книга |
Обновление | [юридические адреса] | Null |
Условие отбора | Is Null | Is Not Null |
То есть, в поля, в которых отсутствует фактический адрес, перемещаются юридические адреса, при этом значение юридического адреса из соответствующей записи удаляется.
Вставка данных из другой таблицы
Запрос на добавление используется для добавления записей из одной таблицы в другую. Реализующая таблица может быть расположена в той же или в другой базе данных.
Исходная и результирующая таблицы могут иметь различное количество полей. В этом случае Access определяет поля с одинаковыми полями и только в них добавляет данные, а остальные поля игнорирует.
Например, в базе данных Телефонно-адресная книга хранятся адреса клиентов, некоторые из которых временно не вошли в состав таблицы Клиенты базы данных Заказы. Теперь их нужно добавить из таблицы Телефонно-адресная книга в таблицу Клиенты (например, тех, кто работает в СП*).
Для выполнения данного запроса необходимо:
1) открыть базу данных Телефонно-адресная книга;
2) открыть окно Конструктора запросов и добавить в бланк Конструктора таблицу Телефонно-адресная книга;
3) выполнить команду Запрос/Добавление или кнопка Тип запроса/Добавление:
Добавление записей в таблицу |
О в текущей базе данных О в другой базе данных Имя файла |
Поскольку мы хотим информацию из Телефонно-адресной книги добавить в таблицу другой базы данных, необходимо выбрать переключатель "В другую базу данных", затем указать имя файла (Заказы.mdb) и выбрать из списка имя таблицы Клиенты;
4) далее необходимо указать поля, данные из которых предлагается поместить в результирующую таблицу.
Поле | Код клиента | Фамилия | … | Предприятие |
Таблица | Телефонно-адресная книга | Телефонно-адресная книга | Телефонно-адресная книга | |
Сортировка | ||||
Добавление | Код клиента | Фамилия | Предприятие | |
Условия отбора | Like "СП*" | |||
или |
Если, например, в Телефонно-адресной книге поле имело название Предприятие, а в таблице Клиенты – Организация, то в поле Добавление не будет автоматически подставлено соответствующее поле таблицы Клиенты. Тогда его нужно выбрать из списка в строке Добавление самостоятельно;
5) перейти в режим Таблицы и проверить правильность выбранных данных, и только потом запустить запрос (!).
Будет выдано сообщение о количестве добавленных записей.
Создание новой таблицы с помощью запроса
Например, в конце каждого года необходимо создавать и сохранять таблицу с суммарным итогом объемов продаж по каждому товару.
Тогда:
1) нужно создать запрос следующего содержания:
Поле | Код товара | Сумма: [Заказы]![Продано]*[Заказы]![Условия] |
Таблица | Заказы | Заказы |
Груп. операция | Группировка | Sum |
Сортировка | ||
Вывод на экран | Ö | Ö |
Усл. отбора |
2) после этого изменить тип запроса на Запрос/Создание таблицы или Тип запроса/Создание таблицы. Последует запрос:
Создание таблицы Имя таблицы О в текущей базе данных О в другой базе данных Имя файла |
Следует ответить, какое имя будет присвоено новой таблице и где она будет размещена.
3) запустить запрос на выполнение.
Сформулируем задачу следующим образом: необходимо в конце каждого месяца иметь итоговую сумму продаж по каждому изделию и сохранять эти данные в сводной таблице.
Для такой задачи нужно создать запрос на создание сводной таблицы с вычисляемыми полями, а затем преобразовать данный запрос в запрос-добавление в каждом новом месяце.
Поле | Месяц: month([Дата продажи]) | Код товара | Сумма: [Заказы!][Усл]*[Заказы!][Цена] |
Имя таблицы | Заказы | Заказы | |
Группировка | Группировка | Группировка | Sum |
Вывод на экран | Ö | Ö | Люди также интересуются этой лекцией: Глава 2. Назначение, технические характеристики. Ö |
Условия отбора | Month (Date()) | ||
Данный бланк запроса вычисляет итоговые суммы по каждому товару за текущий месяц.
- запрос на выборку следует первоначально преобразовать в запрос на создание таблицы и указать имя таблицы Сводная. Потом запустить данный запрос и сохранить его;
- в следующим месяце, прежде чем запросить данный запрос, его нужно преобразовать к запросу на добавление, в результате чего к таблице Сводная будут добавляться новые записи по текущему полю.