СОЕДИНЕНИЕ ТАБЛИЦ ДЛЯ СОЗДАНИЯ МНОГОТАБЛИЧНОГО ЗАПРОСА

В режиме запроса по образцу выводятся четыре типа соединений:

· Внутреннее соединение (или эквисоединение) обычно используется при создании запросов на выборку.

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

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

· Рекурсивное соединение связывает данные в одной таблице. Создание этого типа соединения выполняется путем добавления в запрос ко­пии таблицы (Access назначает псевдоним для копии) и связывания полей идентичных таблиц.

· Соединение по отношению (или тэта-соединение) связывает данные некоторым отношением (это может быть любое отношение, исклю­чая равенство). Соединение по отношению выполняется с помощью предложения where, а не с помощью ключевого слова SQL join. Кроме того, в окне конструктора запросов соединения по отноше­нию не выводятся, также как они не отображаются в окне схемы данных.

1.1 Создание внутреннего соединения по одному полю

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

Все соединения в базе данных "Борей", обозначенные линиями, которые соединяют имена полей (см. рис. 1), являются внутренними соедине­ниями по одному полю, реализованные на основе отношений "один-ко-многим".

Чтобы построить запрос, в котором имеется внут­реннее соединение одной таблицы с другой отношением "один-ко-многим", и связать имена клиентов с размещенными ими заказами:

  1. Если база данных "Борей" открыта, закройте все окна, исключая окно "База данных", дважды щелкнув по кнопке "Закрыть" каждого откры­того окна. В противном случае загрузите базу.
  2. Раскройте вкладку "Запросы" (Queries) окна "База данных", а затем нажмите кнопку "Создать" (New) для создания нового запроса. В по­явившемся диалоговом окне "Новый запрос" (New Query) выделите элемент "Конструктор" (New Query) и нажмите кнопку ОК. Access ото­бражает диалоговое окно "Добавление таблицы" поверх пустого окна запроса.
  3. Выберите таблицу "Клиенты" и нажмите кнопку "Добавить" либо дважды щелкните по имени таблицы, чтобы добавить ее в запрос. Ac­cess отображает список полей таблицы "Клиенты".
  4. Дважды щелкните по имени таблицы "Заказы", а затем нажмите кноп­ку "Закрыть". Access добавляет список полей таблицы "Заказы", а так­же линию, обозначающую соединение полей "КодКлиента" двух таб­лиц (см. рис. 2). Соединение создается автоматически, т. к. поле "КодКлиента" является ключевым в таблице "Клиенты" и в таблице "Заказы" найдено поле с тем же именем (внешний ключ).
  5. Чтобы отыскать заказы, размещенные клиентом, выберите поле "Название" в таблице "Клиенты" и перетащите поле в строку "Поле" (Field) первого столбца бланка запроса.
  6. Выберите поле "КодЗаказа" в таблице "Заказы" и перетащите строку "Поле" (Field) второго столбца. Перетащите поле "ДатаЗаказа" в третий столбец (см. рис. 3).
  7. Нажмите кнопку "Запуск" (Run) либо кнопку "Режим таблицы" (Query View) для вывода результирующего множества запроса (см. рис. 4). Обратите внимание на то, что заголовками полей в созданном наборе записей являются подписи полей (включая пробелы), а не имена в таблице, в которых пробелы не допускаются.

 

1.2. Определение порядка сортировки результатов запроса

Access выводит результирующее множество, записи которого упорядочены по значению первичного ключа. Если первичный ключ включает несколь­ко полей, то записи в динамическом наборе сортируются в порядке указа­ния полей первичного ключа в бланке запроса, где поля, стоящие левее, имеют больший приоритет. Так как поле "Название" является крайним левым ключевым полем, заказы некоторой компании упорядочиваются по номеру заказа. Кроме того, можно явно указать порядок сортировки. На­пример, если требуется вывести первыми заказы, размещенные последни­ми с упорядочением записей по убывающей дате заказа:

Нажмите кнопку "Конструктор" (Design View) для возврата в режим конструктора запроса.

  1. Установите курсор в поле "Сортировка" столбца "ДатаРазмещения", а затем нажмите клавишу <F4> для вывода содержимого списка.
  2. Выделите элемент "по убыванию", чтобы определить сортировку запи­сей в динамическом наборе по убывающей дате заказа (см. рис. 5).
  3. Нажмите кнопку "Запуск" либо кнопку "Режим таблицы" для вывода нового результирующего множества запроса (см. рис. 6).

 

 

1.3. Создание запросов на выборку данных из таблиц с косвенными связями

Запросы можно использовать для вывода косвенно связанных записей, например для отображения категорий товаров, закупленных некоторым клиентом. В запрос следует включить каждую таблицу, которая служит звеном в цепочке соединений. Для рассматриваемого примера необходимо включить все промежуточные таблицы, соединяющие таблицу "Клиенты" с таблицей "Типы". Тогда в цепочку входят следующие таблицы: "Клиенты", "Заказы", "Заказано", "Товары" и "Типы". Однако добавлять поля этих таб­лиц в бланк запроса не требуется — достаточно полей "Название" и "Категория".

Чтобы вывести в запросе данные косвенно связанных записей:

  1. Удалите в режиме конструктора запроса все столбцы, исключая "Название", щелкнув по области выделения столбца над строкой "Поле" и нажав клавишу <Delete>.
  2. Нажмите кнопку "Добавить таблицу" на панели инструментов либо вы­берите команду "Запрос, Добавить таблицу" и добавьте в запрос таблицы "Заказы", "Заказано", "Товары" и "Типы", а затем нажмите кнопку "Закрыть" диалогового окна "Добавление таблицы". Access автоматиче­ски связывает таблицы "Заказы" и "Типы", соединяя промежуточные таблицы с помощью поля первичного ключа в одной таблице и поля внешнего ключа с идентичным именем в другой (рис. 7).

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

  1. Перетащите поле "Категория" из списка полей таблицы "Типы" на строку "Поле" второго столбца бланка запроса. Можно добавить на­звание поля в первую свободную ячейку строки "Поле", дважды щелк­нув по имени поля.
  2. Чтобы вывести эквивалентную созданному запросу инструкцию SQL, выберите команду "Вид, Режим SQL" (View, SQL) (рис. 8). Соеди­нения таблиц задаются операцией inner join.. .on. . .. Косвенные соединения реализуются на основе выражения inner join. . .on. . .on. .
  3. Нажмите кнопку "Конструктор" для закрытия окна SQL, а затем кнопку "Запуск" на панели инструментов. Результирующее множество показано на рис 9.
  4. Закройте запрос, нажав кнопку "Закрыть". Данный запрос лишь пример, поэтому сохранение не требуется.

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

 

 

1.4. Создание внутреннего соединения по нескольким полям

Между двумя таблицами может быть задано несколько соединений. На­пример, допустим, что требуется вывести имена клиентов, у которых сов­падают официальный адрес и адрес доставки. Адрес клиента хранится в поле "Адрес" таблицы "Клиенты", а адрес доставки — в поле "АдресПолучателя" таблицы "Заказы". Таким образом, необходимо сопоставить поля "КодКлиента" в обеих таблицах, а также поля "Адрес" и "АдресПолучателя". Для этого требуется использовать внутреннее соедине­ние по нескольким полям.

Для вывода имен клиентов, официальный адрес и адрес доставки которых совпадают:

  1. Создайте новый запрос, раскрыв вкладку "Запросы" (Queries) окна "База данных" и нажав кнопку "Создать" (New). В появившемся диало­говом окне "Новый запрос" выделите элемент "Конструктор" (New Query) и нажмите кнопку ОК.
  2. Добавьте в запрос таблицы "Клиенты" и "Заказы", выбрав каждую из них в диалоговом окне "Добавление таблицы" и нажав кнопку "Добавить". Нажмите кнопку "Закрыть".
  3. Выберите в списке полей таблицы "Клиенты" поле "Адрес" и перета­щите его на поле "АдресПолучателя" таблицы "Заказы". Это приводит к созданию соединения полей Адрес и АдресПолучателя (рис. 10). Линия, обозначающая связь, имеет с двух сторон точки, которые ука­зывают на то, что соединение выполнено между полями, связь кото­рых в схеме данных не задана, их имена не совпадают и они не явля­ются первичными ключами.
  4. Перетащите поля "Название" и "Адрес" таблицы "Клиенты", а затем поле "АдресПолучателя" таблицы "Заказы" на бланк запроса.
  5. Задайте сортировку по возрастанию в столбце "Название".
  6. Нажмите на панели инструментов кнопку "Запуск". На рис. 11 по­казано результирующее множество запроса.
  7. Чтобы подавить вывод одинаковых строк, необходимо изменить зна­чение свойства "Уникальные значения" (Unique Values) в бланке свойств запроса. Для отображения бланка свойств нажмите кнопку "Конструктор", а затем кнопку "Свойства" (Properties) на панели ин­струментов, либо дважды щелкните по пустой области верхней части окна запроса (рис. 12). Если заголовком бланка является строка "Свойства списка полей" (Field List) или "Свойства поля" (Field Pro-

perties), щелкните по пустому месту, чтобы вывести свойства запроса. Кроме того, можно щелкнуть правой кнопкой мыши по свободной об­ласти верхней части окна запроса и выбрать в контекстном меню команду "Свойства" (Properties)

  1. По умолчанию свойство запроса "Уникальные записи" (Unique Values) имеет значение True (Да), а свойство "Уникальные значения" — False (Нет). Поэтому в инструкцию SQL, связанную с запросом, добавляется ключевое слово Access SQL distinctrow (рис. 8). Измените значе­ние свойства "Уникальные значения" на "Да". При этом вместо клю­чевого слова SQL distinct в инструкции SQL будет участвовать клю­чевое слово Access distinctrow. Нажмите кнопку "Свойства" для за­крытия бланка свойств.
  2. Нажмите на панели инструментов кнопку "Запуск". Результирующее множество не содержит повторяющихся записей (рис. 13).
  3. Выберите команду "Вид, Режим SQL" для вывода инструкции SQL (рис. 14). Обратите внимание на то, что ключевое слово distinct инструкции select исключает записи, которые содержат повторяю­щиеся значения в отобранных полях.
  4. Нажмите кнопку "Закрыть" для закрытия запроса и не сохраняйте его. В этом случае вы избежите хранения ненужного примера в базе данных. Для большинства заказов адрес клиента и адрес доставки совпадают, по­этому было бы лучше отыскивать заказы, для которых адреса различаются. Однако в Access нельзя создать такой запрос с помощью соединения по нескольким полям, т. к. в операции Access SQL inner join использовать оператор <> не допускается. Подробную информацию о выполнении сое­динения по неравенству смотрите ниже в разделе "Создание соединения по отношению".

2. Использование полей подстановок

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

· Для поля, содержащего значения внешнего ключа, создастся список значении одного или нескольких полей связанной базовой таблицы. Например, таблица "Заказы" базы данных "Борей" имеет два поля внешнего ключа: "КодКлиента" и "Код Сотрудника".Для поля "КодКлиента" отображается список значений поля "Название" табли­цы "Клиенты", а для поля "КодСотрудника" — список значений полей "Фамилия" и "Имя" таблицы "Сотрудники", разделенных запятой и пробелом. Для поля "КодКлиента" подстановка реализуется на основе простого запроса на выборку: select dictinctrow [КодКлиента], [Название] FROM [Клиенты] ORDER BY [Название];.

· Для любого другого поля, исключая поле простого первичного клю­ча, список содержит фиксированные значения.

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

является источником записей. На практике чаще всего используется поле со списком, у которого значение свойства "Ограничиться списком" (Limit to List) равно Да. Ниже описывается, как связать списки подстановки зна­чений внешнего ключа или фиксированных величин с полями таблицы.

2.1 Добавление списка, задающего значение внешнего ключа, при помощи Мастера подстановок

Рассмотрим построение списка подстановки значений внешнего ключа таблицы

"Персональные мероприятия", созданной в предыдущих главах. Чтобы заменить поле "Код Сотрудника" полем подстановки:

1. Выделите таблицу "Персональные мероприятия" в окне "База данных", а затем нажмите комбинацию клавиш <Ctrl>+<C> для копирования таблицы в Буфер обмена.

2. Нажмите комбинацию клавиш <Ctrl>+<V> для вывода диалогового окна "Вставка таблицы" (Paste Table As). Введите имя копии, напри­мер, "Персональные мероприятия (поля подстановки)" и нажмите кнопку ОК.

  1. Откройте копию в режиме конструктора и выделите поле "КодОтветственного". Раскройте вкладку "Подстановка" (Lookup) для вывода текущих свойств подстановки. Поле не имеет этих свойств. В ячейке столбца "Тип данных" (Data Type) выберите из списка элемент "Мастер подстановок" (рис. 16). Отображается первое диалоговое окно Мастера подстановок.
  2. Поле подстановки должно включать значения из другой таблицы (таблица "Сотрудники"), поэтому изменять установки в первом окне не требуется (рис. 17). Нажмите кнопку "Далее" (Next) для вывода второго диалогового окна Мастера подстановок.
  3. Выбрав переключатель "Таблицы" (Tables), выделите таблицу "Сотрудники", с которой связано поле "КодОтветственного" (рис. 18). Нажмите кнопку "Далее" для вывода третьего диалогового окна Масте­ра подстановок.
  4. Нажмите кнопку ">" три раза для добавления полей "КодСотрудника", "Фамилия" и "Имя" в список подстановки (рис. 19). Включение ключевого поля базовой таблицы, связанное с полем внешнего ключа, является обязательным. Нажмите кнопку "Далее".
  5. Измените ширину столбцов, обеспечив достаточный интервал между фамилией и именем. Двойной щелчок по правому краю заголовка столбца приводит к тому, что Мастер подстановок изменяет размер, но не оптимальным образом. Кроме того. Мастер подстановок опреде­ляет, что поле "КодСотрудника" является ключевым, и рекомендует скрыть его (рис. 20). Нажмите кнопку "Далее" для вывода последне­го окна Мастера подстановок.
  6. Не изменяйте предлагаемой подписи для поля подстановки (рис. 21). Если задать другое значение, то изменится имя поля, а не его подпись.
  7. Нажмите кнопку "Готово" (Finish) для завершения работы Мастера подстановок, а затем кнопку ОК в ответ на приглашение сохранить структуру таблицы. В свойствах подстановки для поля появляются но­вые значения (рис. 22). Мастер подстановок также создает сле­дующую инструкцию SQL:

SELECT DISTINCTROW [Сотрудники].[КодСотрудника], [Сотрудники].[Фамилия], [Сотрудники].[Имя] FROM [Сотрудники];.

  1. Нажмите кнопку "Режим таблицы" для вывода данных таблицы. В по­ле "КодОтветственного" выводится только первый столбец списка. Увеличьте ширину поля до ширины списка, предварительно раскрыв его (рис. 23).
  2. Вернитесь в режим конструктора, выберите свойство "Источник строк" (Row Source) и нажмите кнопку "Построить" (Build) для вывода окна "Инструкция SQL" (Row Source SQL) в режиме конструктора запросов (рис. 24), а затем закройте его.

2.2 Добавление списка постоянных значений к полю таблицы

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

  1. Выберите поле "ТипМероприятия". В ячейке столбца "Тип данных" (Data Type) выберите из списка элемент "Мастер подстановок" для за­пуска Мастера подстановок.
  2. В появившемся диалоговом окне выберите переключатель "Фикси­рованный набор значений" (I Will Туре in the Values That I Want) и нажмите кнопку "Далее".
  3. Во втором диалоговом окне Мастера подстановок введите значение 2 в поле "Число столбцов" (Number of Columns) и нажмите клавишу <Таb> для создания второго столбца.
  4. Введите значенияП, Принять; К, Квартальный отчет; Г, Годовой от­чет; О, Изменить оклад в столбцы Столбец1 и Столбец2 первых четы­рех строк. Измените ширину столбцов, обеспечив достаточный интер­вал между ними (рис. 25). Нажмите кнопку "Далее" для вывода тре­тьего окна Мастера подстановок.
  5. В поле "ТипМероприятия" используется один символ для обозначе­ния типа мероприятия, поэтому выберите "Столбец!" в качестве столбца, содержащего значения, которые необходимо добавить в таблицу (рис. 26). Нажмите кнопку "далее" для вывода четвёртого и последнего окна Мастера подстановок.
  6. Не изменяя предлагаемой Мастером подстановок подписи для списка подстановки, нажмите кнопку "Готово" (Finish). Выведите новые свойства подстановки (см рис. 27).Свойству "Тип источника строк" (Record Source Type) присваивается значение "Список значений", свойству "Источник строк" – значение

"П"; "Принять"; "К"; "Квартальный отчёт"; "Г"; "Годовой отчёт"; "О"; "Изменить оклад".

  1. Нажмите кнопку "Режим таблицы" и сохраните внесённые изменения. Увеличьте ширину столбца "Тип" до ширины списка, раскройте список и убедитесь в том, что в нём содержатся фиксированные значения (рис.28).
  2. Если необходимо скрыть сокращённое название типа меропрятия, замените первую величину в поле свойства "Ширины столбцов" (Column Widths) на 0.

 

 

3. Внешнее, рекурсивное соединения и соединение по отношению

 

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

3.1 Создание внешнего соединения

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

Запрос, в котором участвуют таблицы с левым внешним соединением (left join или *= в SQL), выводит все записи таблицы "один" с уни­кальным значением первичного ключа в независимости от того, имеются ли соответствующие им записи в таблице "многие". И наоборот, запрос, в котором участвуют таблицы с правым внешним соединением (right join или =* в SQL), выводит все записи таблицы "многие" в независимости от того, имеются ли соответствующие им записи в таблице "один". Обычно, но не обязательно, записи таблицы "многие", которые не подчиняются ни одной записи в таблице "один", являются "висячими" и могут быть связа­ны отношением "многие-к-одному" с записями другой таблицы.

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

  1. Создайте новый запрос и добавьте в него таблицы "Сотрудники" и "Персональные мероприятия".
  2. Перетащите поле "КодСотрудника" таблицы "Сотрудники" на поле "КодСотрудника" таблицы "Персональные мероприятия" для создания внутреннего соединения между ними. Access автоматически создает соединение, если только была установлена связь между этими полями при создании таблицы "Персональные мероприятия".
  3. Выделите и перетащите поля "Фамилия" и "Имя" таблицы "Сотрудники", а также поля "КодСотрудника" и "ДатаПлан" таблицы "Персональные мероприятия" соответственно в первые четыре столбца бланка запроса.
  4. Выделите линию, соединяющую поля "КодСотрудника", щелкнув по ней (рис. 29). Увеличение толщины тонкого отрезка линии указы­вает на то, что линия выделена. На рис. 29 два списка полей стоят на расстоянии друг от друга, так что можно заметить тонкий отрезок соединения.
  5. Выберите команду "Вид, Параметры объединения" (View, Join Proper­ties). Команда активна только тогда, когда выделено соединение. Кро­ме того, можно вывести диалоговое окно "Параметры объединения" (Join Properties), дважды щелкнув по тонкому отрезку соединения. При двойном щелчке по любому из двух толстых отрезков линий по краям соединительной линии выводится бланк свойств запроса. В диалого­вом окне "Параметры объединения" переключатель "1" задает обычное внутреннее соединение, переключатель "2" — левое внешнее соедине­ние и переключатель "3" — правое внешнее соединение.
  6. Задайте левое внешнее соединение, выбрав переключатель "2". Нажмите кнопку ОК для закрытия диалогового окна.
  7. Нажмите на панели инструментов кнопку "Запуск" для вывода резуль­тирующего множества запроса с левым внешним соединением. Три сотрудника не имеют записей в таблице "Персональные мероприятия" (рис. 31). Результаты отличаются, если ввести дополнительные данные. Если для всех сотрудников имеется план мероприятий, то от­кроите таблицу "Персональные мероприятия" и удалите его для нескольких служащих, а затем повторно выполните запрос.

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

3.2 Создание рекурсивного соединения

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

Для создания рекурсивного соединения в таблице "Персональные меро­приятия":

  1. Создайте новый запрос и добавьте в него таблицу "Персональные меро­приятия".
  2. Добавьте в запрос копию таблицы "Персональные мероприятия", повтор­но нажав кнопку "Добавить". Access присваивает копии имя "Персональные мероприятия". Закройте диалоговое окно "Добавление таблицы".
  3. Перетащите поле "КодОтветствснного" исходной таблицы на поле копии "КодНачальника". Между таблицами возникает соединение (рис. 32).
  4. Перетащите поля "КодСотрудника" и "КодОтветственного" исходной таблицы, а также поля "КодНачальника" и "ТипМероприятия" таблицы "Персональные мероприятия_1" соответственно в первые четыре столбца бланка запроса.
  5. При использовании рекурсивных соединений требуется задать вывод только уникальных значений. Нажмите на панели инструментов кноп­ку "Свойства" либо дважды щелкните по свободной области верхней части окна запроса, а затем присвойте в бланке свойств запроса значе­ние да свойству "Уникальные значения". Повторно нажмите кнопку "Свойства" для скрытия бланка свойств запроса
  6. Нажмите кнопку "Запуск" для вывода записей, в которых сотрудник, ответственный и утвердивший план мероприятий, является одним и тем же лицом (рис. 33). В данном случае служащий, у которого по­ле "КодСотрудника" равно 2. является вице-президентом и может не подчиняться общим правилам. Результаты могут отличаться, если ввести дополнительные данные.

В рассматриваемом задании можно добавить в запрос таблицу "Сотрудники", чтобы вывести имя сотрудника. При этом необходимо соз­дать дополнительное соединение между полем "КодСотрудника" исходной таблицы "Персональные мероприятия" и полем "КодСотрудника" таблицы "Сотрудники", а затем перетащить поле "Фамилия" в пятый столбец бланка запроса. Так как в соединении участвует поле первичного ключа, то в ин­струкцию SQL по умолчанию добавляется ключевое слово distinctrow

которое исключает отображение повторяющихся записей. На всякий слу­чай присвойте значение Да свойству "Уникальные значения", нажав на па­нели инструментов кнопку "Свойства", либо дважды щелкнув по свобод­ной области верхней части окна запроса, а затем выполните запрос.

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

 

3.3 Создание соединения по отношению

Большинство соединений основаны на полях с одинаковыми значениями. Однако в некоторых случаях требуется создать связь неравных полей. В режиме конструктора запросов отображаются только внутренние и внеш­ние соединения. Связь, эквивалентную соединению по отношению, мож­но задать с помощью условия отбора, которое указывается для одного из двух полей, участвующих в соединении.

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

  1. Создайте новый запрос и добавьте в него таблицы "Клиенты" и "Заказы".
  2. Перетащите поля "Название" и "Адрес" таблицы "Клиенты", а также поле "Адрес Получателя" таблицы "Заказы" соответственно в первые три столбца бланка запроса.
  3. Введите в строке "Условие отбора" (Criteria) столбца поля "Адрес Получателя" выражение о Клиенты. Адрес. Access автоматиче­ски заключает имена таблицы и поля в квадратные скобки в незави­симости от того, включают ли они пробелы или знаки препинания (рис. 34). В инструкцию select добавляется предложение where Заказы.АдресПолучателя о [Клиенты].[Адрес] (рис. 35).

Если ввести в столбце поля "Адрес" выражение <> Зака­зы. АдресПолучателя, то будет получен идентичный результат. В ин­струкцию select добавляется предложение where Клиенты. Адрес <>[Заказы].[АдресПолучателя].

  1. Нажмите на панели инструментов кнопку "Свойства", либо дважды щелкните по свободной области верхней части окна запроса, а затем присвойте в бланке свойств запроса значение да свойству "Уникальные значения".
  2. Выполните запрос. Результирующее множество содержит только те запи­си. в которых различаются адрес клиента и адрес доставки (рис. 36).
  3. Нажмите кнопку "Закрыть" и, если требуется, сохраните запроc.

4. Использование запросов для обновления таблиц

 

Большинство запросов, свойство "Уникальные записи" которых имеет зна­чение Да, могут использоваться для обновления данных, потому что в предложении SQL, связанном с ними, участвует ключевое слово distinctrow. Эти запросы создают объекты Recordset типа Dynaset, допускающими изменения. Результирующее множество можно обновить, только если в его конце имеется пустая запись (со звездочкой на кнопке выделения). Запросы, свойство "Уникальные значения" которых имеет значение Да, создают объекты Recordset типа Snapshot путем замены ключевого слова ANSI SQL distinct. Такие объекты не допускают ни обновления, ни редактирования имеющихся в них записей, ни добавления новых. Ниже описывается, как обновить запись таблицы, включенной в динамический набор запроса, а также как форматировать данные, исполь­зуя бланк свойств поля запроса.

 

 

4.1 Требования к запросам на обновление

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

· Свойство запроса "Уникальные значения" имеет значение Да.

· В запросе используются рекурсивные соединения.

· В запросе применяются статистические функции SQL, например Sum (). Следует отметить, что статистические функции SQL исполь­зуются во всех перекрестных запросах.

· Если две таблицы связаны отношением "один-ко-многим", то в таб­лице "один" не задано полей первичного ключа, повторения значе­ний которых не допускается.

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

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

· В таблице, которая является единственной в запросе

· В обеих таблицах, связанных отношением "один-к-одному"

· В таблице "многие", связанной с другой таблицей отношением

"один-ко-многим"

· В таблице "один", связанной с другой таблицей отношением "один-ко-многим", если ни одно поле таблицы "многие" не участвует в за­просе

Обновление таблицы "один", связанной с другой таблицей отношением "один-ко-многим", требует особого рассмотрения. Для изменения данных в такой таблице:

  1. Добавьте в запрос поле или поля первичного ключа таблицы "один", а также обновляемые поля.
  2. Добавьте в таблицу "многие" поле или поля, которые соответствуют ключевому полю или полям таблицы "один". Это необходимо для вы­бора обновляемых записей.
  3. Добавьте условие отбора записей для обновления полей, заданных на

шаге 2.

4. Сбросьте флажок "Вывод на экран" (Show) поля или полей таблицы "многие", так чтобы они не выводились в динамическом наборе запи­сей запроса.

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

 

4.2 Определение формата вывода данных

Формат вывода данных запроса копируется из формата данных таблиц, на основе которых создается запрос. Чтобы изменить его, используется функ­ция Format [Имя Поля, Формат}, которая создает вычисляемые поля .

 

 

5. Добавление в запрос всех полей таблицы

 

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

5.1 Использование заголовка окна списка полей для добавления всех полей в запрос

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

  1. Создайте новый запрос и добавьте в него требуемые таблицы.
  2. Дважды щелкните по заголовку окна списка полей таблицы, все поля которой включаются в запрос. Это приводит к выделению всего списка.
  3. Перетащите поля на ячейку строки "Поле" бланка запроса, начиная с которой необходимо добавить имена (рис. 39).

При этом предложение SQL, связанное с запросом, имеет следующий вид:

SELECT DISTINCTROW ИмяТаблицы.ПервоеПоле, ИмяТаблицы. ВтороеПоле, ... ИмяТаблицы.ПоследнееПоле FROM ИмяТаблицы;

 

5.2 Использование строки, помеченной звездочкой, для добавления всех полей в запрос

Для включения всех полей таблицы в запрос без отображения их имен пе­ретащите из списка полей звездочку на ячейку строки "Поле", начиная с которой необходимо вывести данные таблицы. Столбец со звездочкой эк­вивалентен инструкции SQL select DISTINCTROW * FROM ИмяТаблицы;.

Для столбца со звездочкой нельзя задать порядок сортировки и условие отбора. Однако, чтобы все-таки упорядочить записи и указать критерий отбора:

  1. После добавления звездочки перетащите на бланк запроса поле, по значению которого требуется сортировать записи.
  2. Задайте порядок сортировки в ячейке "Сортировка" или "Условие от­бора" столбца выбранного поля.
  3. Сбросьте флажок "Вывод на экран", чтобы не выводить поле дважды в результирующем множестве запроса (рис. 40).

В запросе может участвовать неограниченное число столбцов со звездоч­кой. Поле, по значению которого упорядочиваются записи, задается в инструкции SQL предложением order by Имя Таблицы. ИмяПоля,а условие отбора предложением where УсловиеОтбора

 

5.3 Использование окна свойств для добавления всех полей в запрос

Обычно для обновления в формах или отчетах доступны только те поля, чьи имена указаны в бланке запроса. Все другие поля исключены из результи­рующего множества. Однако, чтобы изменять в форме или отчете данные всех полей таблицы, используемой в запросе, и не включать их имена в за­прос, требуется присвоить значение Да свойству запроса "Вывод всех полей" (Output All Fields). Для задания значения свойства "Вывод всех полей":

  1. Создайте новый запрос и добавьте в него требуемые таблицы.
  2. Нажмите на панели инструментов кнопку "Свойства" либо дважды щелкните по свободной области верхней части окна запроса.
  3. Установите курсор в поле свойства "Вывод всех полей" и измените значение на Да.
  4. Если свойство "Уникальные значения" имеет значение Да, то обновле­ние полей не допускается.
  5. Закройте бланк свойств запроса, нажав кнопку "Свойства".

Если в диалоговом окне "Параметры" сбросить флажок "Вывод всех полей" (Restrict Available Fields), то в инструкцию SQL после списка выбранных полей будет добавлена звездочка, которая определяет вывод всех полей заданных таблиц:

SELECT DISTINCTROW Клиенты.Название, Типы.Категория, * FROM-Клиенты, Типы;

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

 

 

6. Вычисления на подмножестве записей

 

Access позволяет практически мгновенно обобщить информацию, содер­жащуюся в записях таблиц. Эта информация является входными данными для большинства информационных систем. В этих системах можно полу­чить ответы на типичные вопросы, такие, например, как "Какова сумма продаж на заданный день?" или "Как изменилась сумма продаж за теку­щий месяц по сравнению с суммой продаж за тот же месяц прошлого го­да?". Чтобы выполнить расчеты на основе информации таблиц, необходи­мо создать запрос, в котором для вычислений используются статистиче­ские функции Access SQL.

6.1 Использование статистических функций языка SQL

При обобщении данных, которые содержатся в полях таблиц, включенных в запрос, используются статистические функции SQL (табл. 1). Эти функции называются статистическими, потому что они выполняют сбор статистики об информации в записях. Имеющихся статистических функ­ций SQL обычно достаточно для решения большинства задач. Однако можно самостоятельно написать функцию Access VBA, которая выполняла бы более сложные статистические, научные или инженерные расчеты над данными. Статистические функции SQL можно задать в ячейке строки "Групповая операция" (Total) бланка запроса. Эта строка выводится, если нажать на панели инструментов кнопку "Групповые операции" (Sum) либо выбрать команду "Вид, Групповые операции" (View, Totals). Если вы знакомы с принципами статистической обработки данных, то вам известны отличия одной функции от другой.

 

6.2 Вычисления на всем диапазоне записей таблицы

Менеджерам, особенно специализирующимся на продажах и маркетинге, обычно требуется информация о заказах и поставках, размещенных и ис­полненных за определенный промежуток времени, финансовым директо­рам — обобщенные величины, такие, например, как общая сумма неопла­ченных счетов и среднее число дней, прошедших со времени выставления счета до момента оплаты. В некоторых случаях необходимо выполнить расчеты над всеми записями таблицы, например, вычислить за весь период работы фирмы среднюю сумму выставленных счетов. Для выбора данных, которые требуется обобщить, в запросе используется условие отбора. Статистические функции SQL указываются в строке "Групповая опера­ция", вывести которую можно, используя кнопку "Групповые операции" (с греческой буквой сигма (å), обозначающей суммирование), которая на­ходится на панели инструментов.

Таблица "Заказы" базы данных "Борей" не содержит поля "Итог", которое содержало бы сумму заказа без стоимости перевозки. Для создания запроса, в котором используются статистические функции SQL для вывода данных о заказах, общего количества, общей, а также средней, наименьшей и наи­большей суммы, требуется добавить поле, которое бы содержало обобщен­ную информацию о каждом заказе. Чтобы создать новую таблицу, которая имеет дополнительное поле, содержащее рассчитанное значение поля "Итог":

  1. Создайте новый запрос и добавьте в него таблицы "Заказы" и "Заказано".
  2. Перетащите поле "КодЗаказа" таблицы "Заказы", а затем поле "ДатаРазмещения".
  3. Введите в ячейке строки "Поле" третьего (пустого) столбца бланка за­проса выражение Итог: Sum([Количество]*[Цена]*(1-[Скидка])), которое вычисляет чистую сумму товаров, включенных в поставку. Установив курсор в столбец "Итог", нажмите на панели инструментов кнопку "Свойства" и присвойте значение "Денежный" (Currency) свойству поля "Формат поля".
  4. Нажмите на панели инструментов кнопку "Групповые операции". В бланк запроса добавляется строка "Групповая операция", содержащая по умолчанию в каждой ячейке операцию "Группировка" (Group By). Назначение операции "Группировка" обсуждается ниже.
  5. Выберите из списка статистических функций SQL в третьей ячейке строки "Групповая операция" элемент "Выражение" (Expression) (рис. 41)..
  6. Нажмите кнопку "Запуск" на панели инструментов, чтобы проверить запрос. Результирующее множество показано на рис. 42.
  7. Закройте запрос, сохранив его под именем"Итоги по заказам".

Чтобы использовать статистические функции SQL для поля "Итог" запроса "Итоги по заказам":

  1. Создайте новый запрос и добавьте в него запрос "Итоги по заказам". Перетащите поле "КодЗаказа" на первый столбец, а затем четыре раза поле "Итог".
  2. Выберите команду "Вид, Групповые операции" либо щелкните правой кнопкой мыши по бланку запроса и выберите из контекстного меню команду "Групповые операции" для добавления на бланк запроса стро­ки "Групповая операция".
  3. Установите курсор в столбец "КодЗаказа" строки "Групповая операция" и выберите из списка функцию Count () (рис. 43).
  4. Установите курсор в первый столбец "Итог" строки "Групповая опера­ция" и выберите из списка функцию Sum() (рис. 43), для второго столбца "Итог" задайте функцию Avg(), для третьего — функцию Min (), длячетвертого — функцию Мах ().
  5. Установите курсор в столбец "КодЗаказа" и нажмите на панели ин­струментов кнопку "Свойства" либо щелкните по столбцу правой кнопкой мыши и выберите из контекстного меню команду "Свойства". Присвойте значение "Счетчик" свойству "Подпись".
  6. Повторите шаг 5 для каждого из четырех столбцов "Итог", присвоив значение "Денежный" свойству "Формат поля", а свойству "Подпись" значения "Суммарная выручка", "В среднем за заказ", "Минимум", "Максимум" соответственно. Значение свойства "Формат поля" зада­вать не требуется, если в запросе "Итоги по заказам" использована функция ccur ().
  7. Нажмите кнопку "Запуск" для вывода результирующего множества. Условие отбора не было указано, поэтому выведенные данные отно­сятся ко всей таблице (рис. 44).
  8. Сохраните запрос под именем"Статистика по заказам". Этот запрос будет использоваться в следующих разделах.

 

6.3 Вычисления на выделенных записях таблицы

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

  1. Нажмите на панели инструментов кнопку "Конструктор" для возврата в режим конструктора, чтобы задать условие отбора группы записей.
  2. Перетащите поле "ДатаРазмешения" на столбец "КодЗаказа", чтобы столбец "ДатаРазмещения" стал первым в бланке запроса. Теперь не­обходимо определить условие отбора заказов на основе даты.
  3. Замените элемент "Группировка" в столбце "ДатаРазмещения" на эле­мент "Условие" (Where). Access сбрасывает флажок "Вывод на экран" столбца "ДатаРазмещения". Если установить этот флажок, то при вы­полнении запроса будет выведено сообщение об ошибке: этого нельзя делать в столбце, который явно связан с предложением SQL where.
  4. Введите выражение <=#31.03.95#And>=#01.03.95# в ячейку "Условие отбора" столбца "ДатаРазмещения" для отбора заказов, раз­мещенных в марте 1995 года (рис. 45).
  5. Выберите команду "Вид, Режим SQL" для вывода предложения SQL. В него добавлена операция where, в данном случае where ( ( ([.Итоги по заказам] .ДатаРазмещения) <=#31.03.95#And>=#01.03.95#) ), которая отбирает требуемые записи. Если не задать в ячейке "Групповая операция" элемент "Условие", то выводятся обобщенные данные для каждого дня марта 1995 года, а не для всего месяца.
  6. Нажмите на панели инструментов кнопку "Запуск" для вывода резуль­тата: количество, общую и среднюю сумму заказов, размещенных в марте 1995 года (рис. 46).

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

  1. Нажмите на панели инструментов кнопку "Конструктор", а затем щелкните по области выделения столбца "ДатаРазмещения", чтобы выделить его. Нажмите клавишу <Insert> для добавления в запрос пус­того столбца..
  2. Введите выражение Месяц: Format ([ДатаРазмещения] ; "уу-mm") в первый (пустой) столбец строки "Поле". Формат "уу-mm" использует­ся для упорядочивания записей по дате. Кроме того, можно применять формат "m" или "mm", но не "mmm", потому что в последнем случае столбцы упорядочиваются в алфавитном порядке, начиная с августа.
  3. Введите выражение <=#31.12.94#And>=#01.01.94# в ячейку "Условие отбора" столбца "ДатаРазмещения" (рис. 47).
  4. Нажмите на панели инструментов кнопку "Запуск" для вывода резуль­тирующего множества (рис. 48).
  5. Выберите команду "Вид, Режим SQL" для вывода предложения SQL. Инструкция SQL, показанная на рис. 49, была для ясности отформатирована: добавление пробелов и концов строк не влияет на ее смысл.

6. Выберите команду "Файл, Сохранить как" (File, Save As) для сохране­ния запроса под другим именем, таким, например, как "Ежемесячная статистика по заказам".

 

 

7. Создание запросов с параметрами

Если запрос требуется выполнять многократно, постоянно изменяя усло­вие отбора, то можно преобразовать его в запрос с параметрами. Запросы с параметрами, позволяют задать критерий отбора с помощью диалогового окна "Введите значение параметра". Например, в запросе "Ежемесячная статис­тика по заказам", создание которого рассмотрено в предыдущем разделе, может изменяться только один аргумент: период времени, за который тре­буется подвести итоги по продажам. Ниже описывается, как добавить в запрос параметр, а также как указать тип данных аргумента.

7.1 Добавление параметра в запрос "Ежемесячная статистика по заказам".

Чтобы преобразовать запрос "Ежемесячная статистика по заказам" в запрос с параметрами, сначала необходимо задать текст приглашения, которое выводится в диалоговом окне "Введите значение параметра". При создании запроса с параметрами требуется заменить фактические значения подсказ­кой, заключив ее текст в квадратные скобки. Для этого:

  1. Откроите в режиме конструктора запрос "Ежемесячная статистика по заказам".
  2. Установите курсор в ячейку "Поле" столбца "Месяц", нажмите клави­шу <F2> для выделения содержимого ячейки, а затем комбинацию клавиш <Ctrl> + <C>. чтобы поместить выделенное выражение в Буфер обмена.
  3. Установите курсор в ячейку "Поле" столбца "ДатаРазмещения", на­жмите клавишу <F2> для выделения содержимого ячейки, а затем комбинацию клавиш <Ctrl>+<V>, чтобы заменить его на выражение, содержащееся в Буфере обмена.
  4. Установите курсор в ячейку "Условие отбора" столбца "ДатаРазмещения" и замените выражение <=#31.12.94#And>=#01.01.94# строкой [Введите месяц и год в формате ММ-ГГ:] (рис. 50).
  5. Нажмите на панели инструментов кнопку "Запуск". В появляющемся диалоговом окне "Введите значение параметра" выводится надпись, которая задана на шаге 4 в качестве критерия отбора.

Введите строку 03-94, чтобы вывести данные для марта 1995 года (рис. 10.51).

Нажмите кнопку ОК для вывода результирующего множества запроса(рис.52).

7.2 Определение типа данных параметра

Все параметры по умолчанию имеют текстовый тип. Если условие отбора относится к данным с типом "Дата/Время" (Data/Time) или "Числовой" (Number), то необходимо определить тип данных для каждого такого аргу­мента, используя диалоговое окно "Параметры запроса" (Query Parameters).

Для задания типа данных параметра:

  1. С помощью мыши выделите строку Введите месяц и год в форма­те мм-гг: в ячейке "Условие отбора" столбца "ДатаРазмещения" (не включайте квадратные скобки) и скопируйте текст в Буфер обмена, нажав комбинацию клавиш <Ctrl>+<0.
  2. Выберите команду "Запрос, Параметры" (Query, Parameters) для вывода диалогового окна "Параметры запроса".
  3. Вставьте текст приглашения в столбец "Параметр" (Parameter), устано­вив в него курсор и нажав комбинацию клавиш <Ctrl>+<V>. Строки в столбце "Параметр" и в ячейке "Условие отбора" должны совпадать в точности, что обеспечивается использованием Буфера обме­на. Не указывайте в столбце "Параметр" квадратные скобки!
  4. Нажмите клавишу <Таb> для перемещения к столбцу "Тип данных" (Data Type) и выберите из списка элемент "Текстовый" (Text) (рис. 53). Нажмите

кнопку ОК для закрытия диалогового окна.

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

 

 

8. Создание перекрестных запросов

 

Перекрестные запросы — это запросы, в которых вычисляются статисти­ческие данные и определяется их внешний вид. Информация выводится в привычной форме: в виде таблицы. В предложениях Assess SQL для обо­значения перекрестного запроса используется ключевое слово transform . С по­мощью рассматриваемого типа запросов можно:

· Указать поле, которое является заголовком строки, используя опера­цию "Группировка".

· Задать поле или поля, которые являются заголовками столбцов, а

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

· Указать место размещения данных в таблице. Перекрестные запросы обладают следующими достоинствами:

· Возможностью вывода значительного объема данных в компактном и

привычном виде.

· Итоговые данные представляется в формате, который идеально под­ходит для автоматического создания графиков и диаграмм с по­мощью Мастера диаграмм Access.

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

При использовании перекрестных запросов имеется только одно ограни­чение: нельзя сортировать таблицу результатов по значениям, содержа­щимся в столбцах. Таким образом, например, невозможно создать запрос. в котором товары упорядочены в строках по объему продаж: в подавляю­щем большинстве случаев одновременное упорядочивание данных в столбцах по всем строкам невозможно. Однако можно задать сортировку по возрастанию или по убыванию либо отсутствие упорядочивания для заголовков строк. Мастер перекрестного запроса помогает в создании перекрестных запро­сов. Однако он имеет одно ограничение: мастер создает перекрестный за­прос только на основе одной таблицы или одного запроса. Для боль­шинства баз данных потребуется использовать по крайней мере две табли­цы. В этом случае для применения Мастера перекрестного запроса необ­ходимо построить запрос, включающий все требуемые таблицы. Таким об­разом, в следующих разделах описывается создание перекрестного запроса без помощи мастера.

 

8.1 Создание перекрестного запроса "ежемесячная выручка от продаж"

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

  1. Создайте новый запрос и добавьте в него таблицы "Товары". "Заказано" и "Заказы".
  2. Перетащите поля "КодТовара" и "Марка" таблицы "Товары", а затем поле "ДатаРазмещения" таблицы "Заказы".
  3. Выберите команду "Запрос, Перекрестный" (Query, Crosstab). Заголо­вок окна запроса Запрос1: на выборку (Select Query: Query1) изменится на Запрос1: перекрестный запрос (Crosstab Query:

Query1). Кроме того, в бланк запроса будет добавлена строка "Перекрестная таблица" (Crosstab).

  1. Выберите в списке ячейки "Перекрестная таблица" столбца "КодТовара" значение "Заголовки строк" (Row Heading). Выполните то же самое для столбца "Марка". Эти столбцы являются требуемыми за­головками строк перекрестной таблицы.
  2. Выберите в списке ячейки "Групповая операция" столбца "КодТовара" значение "Условие". В ячейке "Условие отбора" этого столбца введите выражение <=#31.12 . 94#And>=#01. 01. 94# для вывода в перекрест­ной таблице данных за 1994 год.
  3. Установите курсор в ячейку "Поле" следующего (пустого) столбца и введите следующее выражение:

Объем продаж: Sum([Заказано].[Количество]*
[Заказано].[Цена])

Выберите в ячейке "Групповая операция" того же столбца значение "Выражение", а затем в ячейке "Перекрестная таблица" значение "Значение" (Value). В столбце "Объем продаж" вычисляется общий объем заказов на каждый товар, который подставляется в ячейки пе­рекрестной таблицы. Ссылка на таблицу "Заказано" обязательна, иначе будет выдано сообщение об ошибке "Неоднозначная ссылка на поле" (Ambiguous field reference).

  1. Установите курсор в ячейку "Поле" следующего (пустого) столбца и введитe выражение Format([ДатаРазмещения]; "mmm"). Access добавляет имя поля "Выражение1" (Expr1), применяемое по умолчанию. Не меняйте его, т. к. функция Format () создает при запуске запроса имена столбцов, состоящие из трех первых букв названия месяца (формат "mmm"). Выберите из списка в ячейке "Перекрестная таблица" значение "Заголовки столбцов" (Column Heading) (рис. 54).
  2. Нажмите кнопку "Запуск". Через несколько секунд появляется резуль­тирующее множество (рис. 55).

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

 

8.2 Использование фиксированных заголовков столбцов в перекрестных запросах

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

  1. Переключитесь в режим конструктора и выведите свойства запроса. В бланке свойств выводится свойство "Заголовки столбцов" (Column Headings), которое имеется только у перекрестных запросов.
  2. Введите краткие названия каждого из месяцев года в поле свойства "Заголовки столбцов" (рис. 56). Необходимо воспроизвести назва­ния без ошибок, в противном случае данные для неправильно задан­ных месяцев не отображаются. Сокращения требуется заключить в ка­вычки и разделять названия точками с запятыми. Пробелы не нужны. По завершении ввода всех 12 месяцев закройте бланк свойств.
  3. Нажмите кнопку "Запуск". Теперь заголовки столбцов перекрестной таблицы соответствуют календарной последовательности (рис. 57). Если результирующее множество выглядит не так, как на рисунке, проверьте правильность фиксированных заголовков столбцов, задан­ных в поле свойства "Заголовки столбцов". Если заголовок столбца введен неправильно, то столбец отсутствует в перекрестной таблице.

4. Выберите команду "Файл, Сохранить как" и сохраните запрос под именем "Ежемесячная выручка от продаж".Чтобы напечатать перекрестную таблицу, нажмите кнопку "Печать" (Print), а для предварительного просмотра данных перед печатью щелкните по кнопке "Предварительный просмотр" (Print Preview).

8.3 Понижение уровня детализации в перекрестных запросах

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

Для создания перекрестного запроса, который выводит ежеквартальную выручку от продаж по типам товаров (а не значению поля "КодЗаказа"):

  1. Выберите команду "Файл, Сохранить как" и сохраните запрос под именем "Ежеквартальная выручка от продаж товаров по типам".
  2. Добавьте в запрос таблицу "Типы".
  3. Для того чтобы четко представлять себе связи между таблицами, щелкните по заголовку каждого списка полей и перетащите их, чтобы они заняли места, показанные на рис. 58.
  4. Перетащите поля "КодТипа" и "Категория" таблицы "Типы" на столбец "КолТовара". В ячейках "Перекрестная таблица" обоих столбцов выбе­рите значение "Заголовки строк".
  5. Удалите столбцы "КодТовара" и "Марка", щелкнув по области выделе­ния столбца, а затем нажав клавишу <Delete> (рис. 58).
  6. Введите в столбец "Выражение!" выражение Format ([ДатаРазмацания] ;

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

  1. Откройте бланк свойств и очистите содержимое свойства "Заголовки столбцов", а затем закройте бланк. Если не удалить фиксированные заголовки, то в перекрестной таблице не будет данных. Чтобы уско­рить работу запроса, можно задать в поле свойства "Заголовки столб­цов" четыре фиксированных названия: "Квартал 1", ..., "Квартал 4".
  2. Нажмите кнопку "Запуск" (рис. 59).
  3. Выберите команду "Вид, Режим SQL" для вывода инструкции SQL (рис. 60). Инструкция содержит операцию transform, в которой определяются данные, содержащиеся в таблице. В операции pivot за­даются заголовки столбцов. После ключевого слова in указываются, если есть, фиксированные названия столбцов. Однако слова transform и pivot не являются зарезервированными словами ANSI SQL. Более того, в Access и ANSI SQL ключевое слово in интерпрети­руется по-разному.
  4. Сохраните запрос, выбрав команду "Файл, Сохранить" (File, Save). За­прос "Ежеквартальная выручка от продаж товаров по типам" использу­ется ниже при рассмотрении многих вопросов.

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

 








Дата добавления: 2014-12-12; просмотров: 6220;


Поиск по сайту:

При помощи поиска вы сможете найти нужную вам информацию.

Поделитесь с друзьями:

Если вам перенёс пользу информационный материал, или помог в учебе – поделитесь этим сайтом с друзьями и знакомыми.
helpiks.org - Хелпикс.Орг - 2014-2024 год. Материал сайта представляется для ознакомительного и учебного использования. | Поддержка
Генерация страницы за: 0.107 сек.