Студопедия

КАТЕГОРИИ:


Архитектура-(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.Запрос, использующий три связанные таблицы и их поля

Теперь можно приступать к установке критериев, сортировке, созданию вы­числяемых столбцов и прочим операциям, которые ничем не отличаются от однотабличных запросов. На рис. 2.39 показан запрос на расчет планируемых ос­татков (рисОЗ_06 в базе примеров), основанный на трех таблицах: Заказы, Товары и Заказано. Результат запроса отображает поля идентификатора по­ставщика (КодПоставщика), название товара (Марка), остатки на складе (НаСкладе) из таблицы Заказы, заказанное количество (Количество) из таб­лицы Заказано, дату заказа (ДатаРазмещения) из таблицы Заказы, а также вычисляемое поле планируемых остатков с учетом заказа (Останется), форми­руемое как разность между значениями НаСкладе и Количество. В динами­ческий набор данных будут отобраны все заказы, начиная с 6 мая 1998 года; а сортировка будет проведена по вычисляемому полю Останется. На рис. 2.40 показан результат выполнения этого запроса.

Рис. 2.40. Результат выполнения многотабличного запроса, показанного на рис. 2.39

 

При создании многотабличных запросов следует обращать внимание на наличие в разных таблицах полей с одинаковыми именами. В нашем примере таблицы Заказано и Товары содержат одноименные поля Цена. Для того чтобы не запутаться с этими полями в некотором выражении, дополняйте имя поля именем таблицы в следующем формате: [ИмяТаблицы]. [ИмяПоля]

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

Заказано.[Цена]*[Количество]*(1-[Скидка])

 

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

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

 

1. Вложение одних запросов в другие.

2. Создание сводного запроса.




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


Дата добавления: 2015-06-25; Просмотров: 645; Нарушение авторских прав?; Мы поможем в написании вашей работы!


Нам важно ваше мнение! Был ли полезен опубликованный материал? Да | Нет



studopedia.su - Студопедия (2013 - 2024) год. Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав! Последнее добавление




Генерация страницы за: 0.013 сек.