КАТЕГОРИИ: Архитектура-(3434)Астрономия-(809)Биология-(7483)Биотехнологии-(1457)Военное дело-(14632)Высокие технологии-(1363)География-(913)Геология-(1438)Государство-(451)Демография-(1065)Дом-(47672)Журналистика и СМИ-(912)Изобретательство-(14524)Иностранные языки-(4268)Информатика-(17799)Искусство-(1338)История-(13644)Компьютеры-(11121)Косметика-(55)Кулинария-(373)Культура-(8427)Лингвистика-(374)Литература-(1642)Маркетинг-(23702)Математика-(16968)Машиностроение-(1700)Медицина-(12668)Менеджмент-(24684)Механика-(15423)Науковедение-(506)Образование-(11852)Охрана труда-(3308)Педагогика-(5571)Полиграфия-(1312)Политика-(7869)Право-(5454)Приборостроение-(1369)Программирование-(2801)Производство-(97182)Промышленность-(8706)Психология-(18388)Религия-(3217)Связь-(10668)Сельское хозяйство-(299)Социология-(6455)Спорт-(42831)Строительство-(4793)Торговля-(5050)Транспорт-(2929)Туризм-(1568)Физика-(3942)Философия-(17015)Финансы-(26596)Химия-(22929)Экология-(12095)Экономика-(9961)Электроника-(8441)Электротехника-(4623)Энергетика-(12629)Юриспруденция-(1492)Ядерная техника-(1748) |
Лекция 3.3. Вложение одних запросов в другие. Создание сводного запроса
Принятие решений с помощью функции Switch Бесспорно, функция IFf: очень полезна, однако ее использование ограничено выполнением всего одного логического теста. Естественно, можно передать функции сложную логическую конструкцию, построенную на использовании операторов Аnd и Оr, как в следующем примере: iFf([Количество] > = 50 and [Тоtal] > = 1000, 0.05,0) В данном примере проверяется факт превышения объемом заказа числа 50 в количественном выражении и суммы 1000 рублей в денежном. В результате этого логического выражения принимается решение о предоставлении скидки в 5%. Вот пример такой усложненной конструкции, учитывающей скидку: IFf(Sum([Количество])>=50 Аnd Sum([Цена] * [Количество] * (1-[Скидка]))>=1000, 0.05,0) Аналогичная конструкция предоставляет скидку в случае выполнения хотя бы одного из вышеназванных условий: IFf (sum([Количество]) >=50 Оr Sum ([Цена] * [Количество] * (1-[Скидка]))> = 1000, 0.05,0) И все же ограничение на единственность логического выражения и возможность возвращения в качестве результата всего одного из двух значений сдерживает применение этой функции в более сложных ситуациях, когда,в зависимости от нескольких значений условия, функция возвращает ряд значений. Для таких случаев в программе Ассеss предусмотрена функция Switch, имеющая следующий синтаксис: Switch((условие1, значение] [,условие2, значение2...]) Условие1 - Логическое выражение, возвращающее значения true или false Значение1- Значение, возвращаемое функцией в случае принятия жением значение1 значения Тrue. Условие 2 - Логическое выражение, возвращающее значения тrue или false. Значение2- Значение, возвращаемое функцией в случае принятия выражением значение 2 значения Тrue. Для примера рассмотрим таблицу экспедиторских компаний Доставка, в которой содержатся три фирмы: Ространс (КодДоставки=1), Почта (КодДоставки=2) и Иное (КодДоставки=3). Также предположим, что каждая из этих компаний берет оплату за доставку товаров в размере, соответственно, 5%, 10% и 15%, принимая за основу общую сумму заказа. В результате сумма оплаты за доставку товара вычисляется по следующей формуле: [Сумма]*[СтоимостьДоставки] Вычисление транспортных расходов — хороший пример использования функции Switch. switch([КодДоставки]=1, 0.05, [КодДоставки] =2, 0.1, [КодДоставки] =1, 0.15) Если идентификатор компании-экспедитора равен единице (Ространс), то функция возвращает значение 0.05; если двум (Почта) — 0.1; и если трем (Иное) —0.15. Лекция 3.2.Формирование сложных запросов. Создание запросов к нескольким таблицам. 1. Создание запросов к нескольким таблицам. 2. Добавление полей из нескольких таблиц. Создание запросов к нескольким таблицам В правильно организованной базе данных в таблицах накапливаются поля, которые сами по себе не несут смысловой нагрузки. К примеру, в базе данных, прилагаемой к книге, таблица строк заказов (Заказано) содержит поле идентификатора товара (КодТовара), которое служит вторичным ключом, содержит числовые данные и совершенно бесполезно с точки зрения конечного пользователя. Многотабличные запросы объединяют связанные таблицы и, таким образом, создают динамический набор данных, заменяющий несмысловые данные (такие как идентификатор товара) смысловыми (такими как название товара). Добавление в запрос нескольких таблиц Для добавления в запрос нескольких таблиц выполните следующие действия. 1. Откройте диалоговое окно Добавление таблицы, после чего возможны два варианта действий: Если вы создаете новый запрос, заранее не выделив некоторую таблицу, просто дождитесь автоматического открытия этого окна. Если вы уже находитесь в окне конструктора запроса, выберите в 2. Выделите в списке название нужной таблицы и щелкните на кнопке Добавить. 3. Повторяйте второе действие для всех нужных в запросе таблиц. 4. Щелкните на кнопке Закрыть. Рис. 2.38. Когда в конструктор запроса добавляется несколько связанных таблиц, программа автоматически отображает между их полями линии объединения
Как вы видите на рис. 2.38, программа Ассеss между связанными таблицами отображает линии объединения. Добавление полей из нескольких таблиц Когда в окно конструктора запроса добавлены все необходимые таблицы, включение их полей в запрос ничем не отличается от аналогичной операции с одной таблицей. • Вы можете перемещать любые поля любых таблиц, просто перетягивая их в ячейки строки Поле. • Вы можете выбирать названия полей из внутреннего списка ячеек строки Поле (обратите внимание, что имени поля предшествует название таблицы). • Чтобы не замусоривать внутренний список ячейки строки Поле, в строке Таблица выберите название таблицы. Тогда в списке установится фильтр на названия полей только выбранной таблицы.
Теперь можно приступать к установке критериев, сортировке, созданию вычисляемых столбцов и прочим операциям, которые ничем не отличаются от однотабличных запросов. На рис. 2.39 показан запрос на расчет планируемых остатков (рисОЗ_06 в базе примеров), основанный на трех таблицах: Заказы, Товары и Заказано. Результат запроса отображает поля идентификатора поставщика (КодПоставщика), название товара (Марка), остатки на складе (НаСкладе) из таблицы Заказы, заказанное количество (Количество) из таблицы Заказано, дату заказа (ДатаРазмещения) из таблицы Заказы, а также вычисляемое поле планируемых остатков с учетом заказа (Останется), формируемое как разность между значениями НаСкладе и Количество. В динамический набор данных будут отобраны все заказы, начиная с 6 мая 1998 года; а сортировка будет проведена по вычисляемому полю Останется. На рис. 2.40 показан результат выполнения этого запроса.
Рис. 2.40. Результат выполнения многотабличного запроса, показанного на рис. 2.39
При создании многотабличных запросов следует обращать внимание на наличие в разных таблицах полей с одинаковыми именами. В нашем примере таблицы Заказано и Товары содержат одноименные поля Цена. Для того чтобы не запутаться с этими полями в некотором выражении, дополняйте имя поля именем таблицы в следующем формате: [ИмяТаблицы]. [ИмяПоля] В качестве примера рассмотрим формулу, вычисляющую поле Сумма в запросе вычисления суммы по строкам заказа с учетом скидки. Значение этого поля равно цене товара с учетом скидки, умноженной на его количество в заказе. Заказано.[Цена]*[Количество]*(1-[Скидка])
Для различения полей Цена, существующих в двух таблицах, которые участвуют в запросе, в выражении вычисляемого поля для него явно указан префикс нужной таблицы (рис. 2.41). Рис.2.41. Если несколько таблиц,, участвующих в запросе, содержат поле с одинаковым именем, то в выражениях для него нужно использовать префикс с названием таблицы
1. Вложение одних запросов в другие. 2. Создание сводного запроса.
Дата добавления: 2015-06-25; Просмотров: 669; Нарушение авторских прав?; Мы поможем в написании вашей работы! Нам важно ваше мнение! Был ли полезен опубликованный материал? Да | Нет |