Заглавная страница Избранные статьи Случайная статья Познавательные статьи Новые добавления Обратная связь FAQ Написать работу КАТЕГОРИИ: АрхеологияБиология Генетика География Информатика История Логика Маркетинг Математика Менеджмент Механика Педагогика Религия Социология Технологии Физика Философия Финансы Химия Экология ТОП 10 на сайте Приготовление дезинфицирующих растворов различной концентрацииТехника нижней прямой подачи мяча. Франко-прусская война (причины и последствия) Организация работы процедурного кабинета Смысловое и механическое запоминание, их место и роль в усвоении знаний Коммуникативные барьеры и пути их преодоления Обработка изделий медицинского назначения многократного применения Образцы текста публицистического стиля Четыре типа изменения баланса Задачи с ответами для Всероссийской олимпиады по праву Мы поможем в написании ваших работ! ЗНАЕТЕ ЛИ ВЫ?
Влияние общества на человека
Приготовление дезинфицирующих растворов различной концентрации Практические работы по географии для 6 класса Организация работы процедурного кабинета Изменения в неживой природе осенью Уборка процедурного кабинета Сольфеджио. Все правила по сольфеджио Балочные системы. Определение реакций опор и моментов защемления |
Вычисления для дат и времениСодержание книги
Поиск на нашем сайте
Используя функции для дат, всегда следует помнить о датах, содержащих информацию о времени. (Напоминаю, все даты могут содержать данные о времени суток. Но, выбирая подходящий формат для поля с датами, вы сообщаете программе Access о том, нужно ли отображать временной компонент даты и разрешать пользователям вводить его, как объясняется в разд. "Дата/время " главы 2. Чаще всего вы будете пользоваться форматом, скрывающим любую информацию о времени суток.) Проблема: функция Date () возвращает текущую дату со значением времени суток, равным 0. Другими словами, если текущая дата — 4 июля 2008 г., то функция Date () возвращает первую секунду 4 июля 2008 г. — момент, когда часы показывают полночь (12:00 a.m.) Если вы не храните значения времени суток, эта проблема не важна, поскольку у всех ваших дат время суток равно 0. Но что произойдет, если вы используете Полный формат даты (см. табл. 2.3) в поле DueDate, разрешающий пользователям вводить и дату, и время. Теперь у условия отбора =<Date () несколько иной смысл — вы сообщаете Access о необходимости отобрать, как совпадающие, все поля с датами, наступившими до первой секунды текущего дня. Это условие не выберет запись со сроком платежа, назначенным на 16:00 текущего дня. В данной ситуации, возможно, нужно изменить условие отбора на следующее: <(Date()+l) Date () +1 — это завтра. Другими словами, это условие отбирает любые записи со сроком платежа, истекшим до первой секунды завтрашнего дня. Между прочим, у программы Access есть функция Now (), возвращающая текущую дату и время. Таким образом, следующее условие фильтрации отбирает все записи, соответствующие текущему моменту (текущего дня) или любому моменту времени во все предшествующие дни: =<Now()
Компоненты дат применяются в нескольких функциях обработки дат, включая функции DatePart (), DateAdd () и DateDiff (). В табл. 7.6 приведены эти и дополнительные полезные функции, относящиеся к датам. Таблица 7.6. Функции обработки дат
Подсказка У программы Access есть другие функции обработки дат, выполняющие часть алгоритма функции DatePart (). Примером может служить функция Month (), извлекающая номер месяца из даты. К другим аналогичным функциям относятся Year(), Day (), Hour (), Minute () и Second (). Эти функции не дают никаких преимуществ, но вы можете встретить их в запросах других пользователей, применяющих их для получения аналогичных результатов.
Обработка пропущенных или неопределенных значений В БД есть два типа полей: обязательные и необязательные. Как правило, в БД поля необязательные (как обсуждалось в разд. "Запрет незаполненных полей" главы 4), что означает для неаккуратного пользователя возможность пропуска большого числа значений. Эти пропущенные значения называют неопределенными (null), и их следует тщательно обрабатывать. Если вы хотите написать условие отбора, вылавливающее неопределенные значения, просто введите в ячейку Условие отбора следующий текст: Is Null Это условие выберет все записи с пропущенными значениями. Воспользуйтесь им в поле CustomerID таблицы Orders для поиска всех заказов, не связанных с клиентом. Или игнорируйте несвязанные записи, заменив условие отбора на обратное: Is Not Null Иногда вам не нужно специально искать (или игнорировать) неопределенные значения. Вместо этого вам надо заменить их для рассматриваемой задачи чем-то более информативным. К счастью, как раз для этого есть функция со странным названием Nz (). У функции Nz () два аргумента. Первое значение (как правило, поле запроса) может содержать неопределенное значение. Второй параметр — это значение, которое вы хотите отобразить в результатах запроса, если программа Access найдет неопределенное значение. Далее приведен пример, использующий функцию Nz () для преобразования в 0 неопределенных значений в поле Quantity: Nz([Quantity], 0) Преобразование в 0 — стандартное поведение для функции Nz (), поэтому можно опустить второй параметр, если это как раз то, что вам нужно: Nz([Quantity]) В данный момент, возможно, вас не сильно впечатляет перспектива замены пропущенных значений нулями. Но эта функция жизненно важна, если нужно создать вычисляемые поля, обрабатывающие значения, которые могут быть неопределенными. Рассмотрим кажущийся безобидным пример: OrderItemCost: [Quantity] * [Price] Это выражение приведет к ошибке, если значение поля Quantity будет неопределенным. Неопределенные значения странным образом распространяются наподобие инвазивного грибка. Если у одного из операндов в вычислении неопределенное значение, результат автоматически становится неопределенным. В данном примере это означает, что иоле OrderItemCost для данной записи становится неопределенным. Хуже того, если OrderItemCost ввести в другое вычисление или промежуточный итог, они тоже станут неопределенными. Прежде чем вы об этом узнаете, ваши значимые данные запроса превратятся в кучу ячеек с неопределенными значениями. Для устранения этой проблемы очистите необязательные ноля от неопределенных значений с помощью функции Nz (): OrderItemCost: Nz([Quantity]) * Nz([Price]) Наконец, функцию Nz () можно использовать для замены всех неопределенных значений другой величиной, В текстовое поле можно ввести что-то более информативное. Далее приведен пример, отображающий текст ("Not Entered" — не введено) рядом с каждой записью, не содержащей имени и фамилии: Name: Nz([FirstName] & [LastName], "[Not Entered]")
Итоговые данные Все запросы, которые вы применяли до этого момента, имели дело с отдельными записями. Если вы выбирали 143 записи из таблицы Orders, то видели все 143 записи в ваших результатах. Но вы также можете группировать записи для получения промежуточных и общих итогов. В этом случае легче просматривать большие объемы информации и делать важные далеко идущие выводы. Далее приведены примеры полезных подводящих итоги запросов:
■ подсчет студентов в каждом классе; ■ подсчет количества заказов, сделанных каждым клиентом; ■ сумма, потраченная на один продукт; ■ общая сумма долга или платежа клиента; ■ подсчет среднего объема заказа, сделанного каждым клиентом; ■ поиск самого дорогостоящего или самого дешевого заказа, сделанного клиентом.
Эти операции — подсчет, суммирование, определение среднего и поиск максимального и минимального значений — основные варианты в итоговом запросе (totals query). Итоговый запрос — это вид запроса, который должен перелопатить большое количество записей и выдать лаконичные итоги. Для создания итогового запроса выполните следующие действия: 1. Создайте новый запрос, выбрав Создание → Другие → Конструктор запросов (Create → Other → Query Design). 2. Добавьте нужные вам таблицы с помощью диалогового окна Добавление таблицы (Show Table) и щелкните мышью кнопку Закрыть (Close). В приведенном далее примере используется таблица Products из БД Boutique Fudge. 3. Вставьте поля, которые хотите использовать. В этом примере используется поле Price, но хитрым образом: поле Price вставляется три раза для того, чтобы в запросе отображались результаты трех разных вычислений. 4. Выберите Работа с запросами → Показать или скрыть → Итоги (Query Tools → Show/Hide → Totals). Программа Access вставляет ячейку Групповая операция ( Total) для каждого поля сразу под ячейкой Таблица. 5. Для каждого поля задайте вариант из списка Групповая операция. Этот вариант определяет использование поля для вычисления итога или для группировки. Итоговый запрос немного отличается от обычного запроса. Каждое поле должно попадать в одну из следующих категорий. ■ Поле используется в итоговом вычислении (таком как определение среднего, подсчет количества и т. д.). Тип нужного вычисления выбирается с помощью ячейки Групповая операция. В табл. 7.7 перечислены все варианты из ячейки Групповая операция. ■ Поле применяется для группировки. Обычно итоговые запросы соединяют в большой общий итог. Но вы можете разбить результаты на более мелкие промежуточные итоги, как описано в следующем разделе. ■ Поле используется для фильтрации или отбора. В этом случае в ячейке Групповая операция нужно выбрать Условие (WHERE). (Фанаты БД, возможно, помнят, что WHERE — это ключевое слово, применяющееся для определения условия в языке SQL, как было описано в разд. "Анализ запроса" главы 6). Нужно также сбросить флажок Вывод на экран, поскольку программа Access не может выводить отдельные значения в итоговых сводках. Примечание Если вы попытаетесь вставить в итоговый запрос поле, которое не используется для вычисления или группировки и не скрыто, то получите ошибку при попытке выполнить запрос.
В этом примере (рис. 7.8) в поле Price применяются три разные групповые операции: Max, Min и Avg. Рис. 7.8. Вверху: в данный итоговый запрос поле Price включено трижды и использует три разных вычисления. Обратите внимание на то, что в каждое поле применяется выражение, в котором дано более информативное название поля. Внизу: результаты отображают одну запись с максимальной ценой, минимальной ценой и средней ценой продуктов, проданных компанией Boutique Fudge Примечание Втабл. 7.7 не указаны два варианта, предназначенные для статистиков — StDev и Var — которые вычисляют стандартное отклонение и дисперсию ряда чисел.
Таблица 7.7. Варианты получения итоговых данных
Разрабатывая итоговые запросы, можно использовать все приобретенные ранее в этой главе навыки написания запросов. Если вы хотите суммировать только продукты в конкретной категории, можно использовать в поле CategoryID, например, такое условие отбора: =3 Это условие отбирает записи, у которых CategoryID равно 3 (что означает их включение в категорию Candies (конфеты)). Примечание Если вы хотите выполнить фильтрацию в поле, которое не используется в вычислении или группировке, убедитесь, что в ячейке Групповая операция выбран вариант Условие и сброшен флажок Вывод на экран.
|
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
Последнее изменение этой страницы: 2016-08-14; просмотров: 363; Нарушение авторского права страницы; Мы поможем в написании вашей работы! infopedia.su Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав. Обратная связь - 3.147.78.249 (0.01 с.) |