Как сделать сумму в access?

Суммирование в отчетах

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

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

В этой статье

Типы агрегатов, которые можно добавить в отчет

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

Суммирует элементы в столбце.

Определяет среднее значение всех элементов столбца.

Подсчитывает количество элементов в столбце.

Возвращает элемент, имеющий наибольшее (числовое или по алфавиту) значение в столбце.

Возвращает элемент, имеющий наименьшее (числовое или по алфавиту) значение в столбце.

Показывает, насколько значения в столбце отклоняются от среднего значения.

Вычисляет дисперсию для всех значений в столбце.

Добавление суммы или другого агрегата в режиме макета

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

В области навигации щелкните отчет правой кнопкой мыши и выберите команду Макет.

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

На вкладке Конструктор в группе Группировка и итоги щелкните Итоги.

Выберите тип агрегатной функции, которую вы хотите добавить в поле.

Access добавляет текстовое поле в колонтитул отчета и задает в качестве значения его свойства Данные (Control Source) выражение, которое выполняет нужное вычисление. Если в отчете есть уровни группировки, Access также добавит текстовое поле, которое выполняет такие же вычисления в каждом разделе примечания группы.

Дополнительные сведения о создании уровней группировки в отчетах см. в статье Создание отчета с группировкой или сводного отчета.

Добавление суммы или другого агрегата в режиме конструктора

Конструктор позволяет точнее настраивать размещение и внешний вид итоговых значений. В сгруппированных отчетах можно поместить итоги и другие агрегаты в заголовок или примечание каждой группы. Агрегаты уровня отчета можно поместить в заголовок или колонтитул отчета.

В области навигации щелкните отчет правой кнопкой мыши и выберите команду Режим конструктора.

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

На вкладке Конструктор в группе Группировка и итоги щелкните Итоги.

Выберите тип агрегатной функции, которую вы хотите добавить в поле.

Access добавляет текстовое поле в колонтитул отчета и задает в качестве значения его свойства Данные (Control Source) выражение, которое выполняет нужное вычисление. Если в отчете есть уровни группировки, Access также добавит текстовое поле, которое выполняет такие же вычисления в каждом разделе примечания группы.

Дополнительные сведения о создании уровней группировки в отчетах см. в статье Создание отчета с группировкой или сводного отчета.

Вычисление сумм с накоплением (сумм с нарастающим итогом)

В Access можно создавать в отчетах суммы с накоплением. Сумма с накоплением — это сумма значений из всех записей группы или даже отчета.

Создание суммы с накоплением

В области навигации щелкните отчет правой кнопкой мыши и выберите команду конструктор .

На вкладке Конструктор в группе Элементы управления щелкните Поле.

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

Если рядом с текстовым полем отображается подпись, удалите ее или замените текст в ней на более осмысленный.

Выделите текстовое поле. Если страница свойств не отображается, нажмите клавишу F4.

Откройте вкладку Данные. В ячейке свойства Данные (Control Source) введите имя поля или выражение, для которого вы хотите создать сумму с накоплением.

Например введите РасширеннаяЦена для поля «РасширеннаяЦена» или на уровне группы введите выражение =Sum([РасширеннаяЦена]).

Щелкните ячейку свойства Сумма с накоплением (Running Sum).

Щелкните стрелку раскрывающегося списка в поле свойства и выполните одно из указанных ниже действий.

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

Если вы хотите, чтобы сумма накапливалась до конца отчета, выберите в списке Для всего.

Закройте страницу свойств.

Примечание: Если для свойства Сумма с накоплением (Running Sum) задано значение Для всего, то общее итоговое значение можно повторить в колонтитуле отчета. Создайте в нем поле и задайте в качестве значения его свойства Данные (Control Source) имя поля, в котором вычисляется сумма с накоплением, например =[СуммаЗаказа].

Пример вычисления общей суммы в таблице базы данных Microsoft Access с использованием SQL -запроса. Компонент TDBText

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

В данной задаче, на примере таблицы Microsoft Access , вычисляется общая сумма с использованием SQL -запроса. Результат вычисления суммы заносится в компонент типа TDBText .

Используя данный пример, можно производить числовые вычисления над множеством записей заданного столбца.

Читать еще:  Как сделать меню в access?

Условие задачи

Дана таблица, сформированная средствами СУБД Microsoft Access . Таблица содержит данные с начисленной заработной платой работников предприятия.

Таблица имеет следующую структуру.

Приложение должно вычислять суммарную заработную плату всех работников предприятия. Результат суммы должен выводиться в компоненте типа TDBText сразу после загрузки приложения.

Решение

  1. Построение формы.

Из панели инструментов Tool Palette нужно разместить на форме следующие компоненты (рис. 1):

– из вкладки “dbGo” компонент TADOConnection. Создается объект с именем ADOConnection1. Этот компонент нужен для связи других компонент с файлом базы данных;

– из вкладки “ Data Access ” компонент TDataSource. Создается объект с именем DataSource1. Этот компонент связывает таблицу базы данных ADOTable1 с компонентом визуализации данных DBGrid1;

– из вкладки « Data Access ” компонент типа TDataSource. Создается объект с именем DataSource2. Этот компонент нужен для связи компонента ADOQuery1 с компонентом DBText1;

– из вкладки “dbGo” компонент типа TADOTable. Создается объект с именем ADOTable1. Этот компонент соответствует таблице Workers базы данных;

– из вкладки «dbGo» компонент типа TADOQuery. Этот компонент нужен для формирования SQL-запроса и отображения результата этого запроса в компоненте TDBText;

– из вкладки “ Data Controls ” компонент типа TDataGrid. Создается объект с именем DBGrid1. Этот компонент отображает таблицу Workers базы данных;

– из вкладки « Data Controls ” компонент типа TDBText. Создается объект с именем DBText1. Этот компонент отображает результат SQL-запроса, который формируется в компоненте ADOQuery1.

Результирующая сумма будет выводиться в компоненте DBText1.

Схема связей между компонентами изображена на рисунке 2.

Рис. 1. Компоненты формы

Рис. 2. Схема связей между компонентами программы

  1. Подключение базы данных. Свойство ConnectionString компонента ADOConnection1.

Процесс подключения приложения к базе данных Microsoft Access подробно описан здесь.

Приложение к базе данных подключается с помощью свойства ConnectionString компонента ADOConnection1 (рис. 3). В свойстве ConnectionString указывается тип поставщика данных и полный путь к файлу базы данных.

Рис. 3. Строка ConnectionString компонента ADOConnection1

  1. Настройка компонент формы.

Следующим шагом нужно осуществить настройку компонент между собой. Для этого нужно установить:

– в компоненте ADOConnection1 свойство LoginPrompt = “false” (запрет постоянного ввода имени пользователя и пароля при подключении к базе данных);

– в компоненте ADOTable1 свойство Connection = «ADOConnection1”;

– в компоненте ADOQuery1 свойство Connection = “ADOConnection1”;

– в компоненте DataSource1 свойство DataSet = “ADOTable1”;

– в компоненте DataSource2 свойство DataSet = «ADOQuery1”;

– в компоненте DBGrid1 свойство DataSource = “DataSource1”;

– в компоненте DBText1 свойство DataSource = “DataSource2”;

– в компоненте ADOTable1 свойство TableName = “Worker”;

– в компоненте DBGrid1 из свойства Options установить опцию dgEditing = false (запрет внесения данных в ячейки таблицы непосредственно из сетки DBGrid1).

  1. Свойство Active компонентаADOTable1.

Для отображения данных в DBGrid1 нужно выполнить следующие действия над компонентом ADOTable1 (рис. 4):

– выделить компонент ADOTable1;

– установить свойство Active в значение true.

После этого данные таблицы будут отображены в DBGrid1.

Рис. 4. Свойство Active компонента ADOTable1

  1. Настройка размеров компонент и формы.

На этом этапе осуществляется корректировка размеров и позиций компонент на форме согласно образцу, показанному на рисунке 5.

Рис. 5. Основная форма приложения

  1. Скрытие поля ID_Worker в DBGrid1.

Поле ID_Worker целесообразно скрыть, поскольку оно есть ключевым полем. Для этого из контекстного меню нужно вызвать редактор полей « Fields Editor ” компонента ADOTable1. Вызов редактора изображен на рисунке 6.

Рис. 6. Вызов редактора « Fields Editor ”

Откроется окно Form1.ADOTable1 . В этом окне, с помощью мышки, нужно вызвать контекстное меню. В контекстном меню выбрать команду « Add All fields ».

В результате окно редактора примет вид, как показано на рисунке 7.

Рис. 7. Редактор полей Form1.ADOTable1

В редакторе полей отображаются все поля таблицы Worker. Чтобы удалить поле ID_Worker нужно на строке ID_Worker сделать клик правой кнопкой «мыши» и в контекстном меню выбрать команду Delete. После этого можно закрыть редактора Form1.ADOTable1.

В результате, в таблице DBGrid1 будет отображено только два поля (рис. 8).

Рис. 8. Отображение таблицы Worker с двумя полями

  1. Установка в поле Salary фильтра для отображения с двумя знаками после запятой.

Для того, чтобы в поле Salary корректно отображалось значение суммы (2 знака после запятой), нужно выполнить следующее.

Выделить компонент ADOTable1. Вызвать редактора полей “Fields Editor… ” так как описано в пункте 6. В результате откроется список состоящий из двух полей Name и Salary. Выделить строку с названием Salary. В Object Inspector будет активирован объект с именем ADOTable1Salary.

Следующим шагом в Object Inspector в поле “ Display Format ” нужно установить значение « 0.00 » (рис. 9).

Рис. 9. Установка формата вывода в поле Salary объекта ADOTable1

После выполненных действий, значения в поле Salary таблицы будут выводиться с точностью 2 знака после запятой.

  1. Настройка компонента Label1.

В компоненте Label1 в свойстве Caption нужно ввести строку « Сумма = ».

  1. Свойство SQL компонента ADOQuery1.

Компонент DBGrid1 предназначен для вывода суммы на основе SQL -запроса. Сам SQL -запрос формируется в компоненте ADOQuery1 в свойстве « SQL… ” (рис. 10).

Рис. 10. Свойство SQL компонента ADOQuery1

После выбора этого свойства, вызовется редактор “ String List Editor ”, в котором нужно ввести текст SQL -запроса (рис. 11).

Для вычисления суммы нужно ввести следующий текст запроса:

После этого набранный текст запроса нужно подтвердить выбором команды (кнопки) «OK”.

Рис. 11. Текст SQL -запроса

В SQL -запросе будет вызвана функция агрегирования SUM, которая входит в синтаксис языка SQL. Функция SUM вычисляет сумму записей заданного столбца (столбца «Salary»). Также в SQL -запросе формируется новое поле с именем « Сумма ” в котором отображается результат суммы.

Читать еще:  Как сделать пароль в access?

Функции агрегирования обеспечивают получение некоторой обобщенной информации.

Язык SQL имеет и другие стандартные функции агрегирования, которые можно использовать в программах:

– COUNT – выполняет подсчет записей в таблице или подсчет ненулевых значений в столбце таблицы;

– MIN – возвращает минимальное значение в столбце;

– MAX – возвращает максимальное значение в столбце;

– AVG – вычисляет среднее значение для значений, которые помещаются в столбце.

  1. Свойство Active компонента ADOQuery1.

Как было сказано ранее, результат SQL -запроса отображается в компоненте DBText1. SQL -запрос формируется в компоненте ADOQuery1. Для того, чтобы SQL -запрос был доступен для отображения нужно в компоненте ADOQuery1 свойство Active установить в значение “true” (рис. 12).

Рис. 12. Свойство Active компонента ADOQuery1

  1. Свойство DataField компонента DBText1.

Компонент DBText1 предназначен для отображения только одного значения. Этим значением может быть результат функции агрегирования или значение текущей записи некоторого поля. Поэтому, в этом компоненте предусмотрено свойство DataField (“Поле данных»). В этом свойстве указывается поле, которое должно выводиться в DBText1.

В нашем случае поле имеет название « Сумма ». Это название было введено в тексте SQL -запроса.

Рис. 13. Свойство DataField компонента DBText1

После установления поля DataField результат суммы отобразится в компоненте DBText1 (рис. 14).

Рис. 14. Отображение суммы в компоненте DBText1

  1. Установка вывода результата с точностью 2 знака после запятой в компоненте DBText1.

Поскольку компонент DBText1 получает данные от компонента ADOQuery1, то нужно настроить компонент ADOQuery1.

Последовательность шагов следующая.

Вызвать редактор полей “ Form1.ADOQuery1 ” компонента ADOQuery1 из контекстного меню (см. п. 7).

В редакторе полей вызвать контекстное меню и в этом меню выбрать команду « Add all fields ” (рис. 15).

Рис. 15. Команда « Add all fields ” из редактора полей Form1.ADOQuery1

В результате будет добавлено одно поле « Сумма », которое формируется в тексте SQL -запроса. Автоматически создается объект с именем ADOQuery1Сумма .

После выделения поля « Сумма », в Object Inspector нужно установить свойство DisplayFormat в значение « 0.00 » (рис. 16).

Рис. 16. Установка вывода результата с точностью 2 знака после запятой в DBText1

  1. Запуск приложения на выполнение.

Теперь можно запустить приложение на выполнение.

Суммирование по множеству условий функцией БДСУММ (DSUM)

Для выборочного подсчета по нескольким условиям в больших таблицах можно использовать несколько способов: фильтры, сводные таблицы, функции СУММЕСЛИ и СУММЕСЛИМН и т.д.

Еще одним, относительно экзотическим, но весма мощным инструментом является функция БДСУММ (DSUM) из категории Работа с базой данных (Database) . При внешней простоте, она позволяет гибко фильтровать списки по нескольким сложным и связанным между собой условиям и подсчитывает сумму найденных записей по заданному столбцу. Синтаксис функции таков:

=БДСУММ( Исходные_данные ; Столбец_результата ; Диапазон_условий )

  • Исходные_данные — диапазон, включающий в себя таблицу с данными, которые мы анализируем и строкой заголовка.
  • Столбец_результата — название (из шапки таблицы) или порядковый номер столбца, по которому нужно просуммировать данные.
  • Диапазон_условий — диапазон, содержащий названия столбцов и условия по ним.

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

Чтобы удобнее было ссылаться эту таблицу в будущем, конвертируем ее в «умную» командой Форматировать как таблицу на вкладке Главная (Home — Format as Table) или сочетанием клавиш Ctrl + T . На появившейся затем вкладке Конструктор (Design) зададим ей имя — например БазаДанных.

Простая сумма по одному условию

Начнем с простого случая. Допустим, нам нужно просуммировать стоимость по всем сделкам сока Добрый. Это будет выглядеть следующим образом:

Обратите внимание на следующие моменты:

  • Не достаточно просто написать имя умной таблицы БазаДанных в первом аргументе, т.к. в этом случае ссылка не включает шапку, а для функции БДСУММ она необходима. Поэтому к имени добавляется тег [#Все] или, в английском варианте [#All].
  • Столбец, по которому нужно просуммировать данные можно задать либо названием («Стоимость»), либо номером (было бы 5).
  • Название столбца в желтом диапазоне условий должно один-в-один совпадать с названием в исходной таблице.
  • Функция БДСУММ не различает регистр символов (добрый = ДОБРЫЙ = Добрый = ДоБрЫй и т.д.)
  • Чтобы критерий в желтой ячейке А2 Excel не начал понимать как формулу (т.к. формулы обычно начинаются со знака равно) можно использовать текстовый формат или просто начать ввод в ячейку с апострофа:


Приблизительный и точный текстовый поиск

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

  1. Если нужен поиск точного соответствия, то используем конструкцию ‘= (апостроф и знак равно).
  2. Если нужен поиск подстроки, т.е. всех ячеек, которые содержат нужное значение, то его надо заключить в звездочки. В нашем случае будут просуммированы все варианты Абакана (с «г.», без «г.», с пробелами перед-после и т.п.)
  3. Если просто ввести значение без равно и звездочек, то будут найдены и просуммированны все строки, где содержимое начинается с указанного значения, т.е. это равноценно звездочке в конце.

Несколько условий со связками «И» — «ИЛИ»

Если нужно просуммировать данные по нескольким условиям, связанным друг с другом логическим оператором И (AND), то ячейки с этими условиями должны быть в одной строке. Например, если нужно просуммировать все продажи Fanta по Абакану (в любом виде его написания), то это будет выглядеть так:

Если же нужно связать несколько условий логическим оператором ИЛИ (OR), то их нужно расположить в разных строчках. Например, если нужно просуммировать деньги по всем вариантам написания «города на Неве», коих великое множество:

И конечно же, можно комбинировать оба подхода, сочетания в одном запросе условия со связками И и ИЛИ одновременно:

В этом случае вычисляется сумма продаж Fanta в Абакане и Burn у Дубинина.

Суммирование по интервалу дат

В диапазоне условий можно легко задать интервал дат для подсчета. Если интервал ограничен с двух сторон, то нужно будет задать два условия, связанных между собой логическим «И» — поэтому придется писать условия в одной строке, т.е. добавить еще один столбец с тем же названием Дата сделки:

В данном случае вычисляется сумма продаж Fanta за 2016 год и Фруктайм до 2016 года.

Условия для чисел

Для отбора по числовым критериям можно смело использовать обычные знаки неравенств >, =, » обозначающие «не равно» в синтаксисе Excel. Допустим, нам нужно просуммировать все данные по Fanta кроме Самары и по Квасу кроме Пензы — это будет выглядеть так:

Обратите внимание, что если нужно просуммировать Fant’у И Квас по всем городам, кроме Самары И Пензы, то конструкция таблицы условий будет уже немного другая — для каждого товара нужно исключить каждый город:

Заключение

Надеюсь, вы уже поняли, что функция БДСУММ является очень неплохим инструментом и, зачастую, более удобной альтернативой классическим функциям выборочного подсчета типа СУММЕСЛИ (SUMIF) и СУММЕСЛИМН (SUMIFS) . Кроме того, в той же категории Работа с базой данных (Database) можно найти ее «подруг», вычисляющих не только сумму:

  • БСЧЁТ (DCOUNTA) — количество непустых ячеек (в нашем случае — строк заказов)
  • ДМИН (DMIN) — минимальное (например, худшая сделка)
  • ДМАКС (DMAX) — максимальное (лучшая сделка)
  • ДСРЗНАЧ (DAVERAGE) — среднее арифметическое (например, средний чек)

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

Итоговый запрос из базы данных Access

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

1. В окне базы данных щелкните на кнопке Запросы.

2. Дважды щелкните на значке Создание запроса в режиме конструктора.

3. В открывшемся окне диалога (рис. 17.6) выделите строку Контакты.

4. Щелчком на кнопке Добавить добавьте выбранную таблицу в верхнюю область конструктора запроса.

5. Выделите пункт Список и снова щелкните на кнопке Добавить.

6. Щелчком на кнопке Закрыть закройте окно диалога Добавление таблицы. Списки полей двух таблиц, соединенные линией связи, появятся в окне конструктора.

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

Рис. 17.6 . Добавление таблицы

8. Перетащите поле Фамилия в ячейку Поле первого столбца конструктора.

9. В ту же ячейку второго столбца перетащите поле Имя таблицы Контакты.

10. В третий, четвертый и пятый столбцы бланка запроса перетащите поле Дата таблицы Список (рис. 17.7).

Рис. 17.7. Запрос с групповыми операциями

11. В раскрывающемся списке ячейки Групповая операция третьего столб ца бланка запроса выберите пункт Min.

12. В той же ячейке четвертого столбца выберите пункт Мах.

13. В пятом столбце задайте групповую операцию Count. Групповые операции построенного запроса обработают все записи таблицы Список, соответствующие конкретному человеку из таблицы Контакты, и вместо самих данных таблицы Список выведут в соответствующее поле результата запроса только значение величины, вычисляемой по определенной формуле. Доступные групповые операции перечислены в табл. 17.1.

ТАБЛИЦА 17.1 . Групповые операции

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

14. Щелкните на кнопке Вид, чтобы выполнить запрос. Появится таблица с пятью столбцами. Два первых столбца содержат фамилии и имена людей. По ним выполняется группировка, то есть расчет значений остальных полей запроса выполняется для записей таблицы Список, сопоставляемых с одним человеком. Как уже говорилось выше, соответствие контакта таблицы Список и человека из таблицы Контакты определяется полями Код_Контакты, с помощью которых осуществляется связь этих двух таблиц. Третий и четвертый столбцы запроса выводят соответственно дату первого (функция Min) и последнего (функция Мах) контакта с данным человеком. Пятый столбец содержит количество записей в таблице Список (функция Count), соответствующих. данному человеку, то есть число контактов с ним. Единственный недостаток построенного запроса — это непонятные имена столбцов. Давайте скорректируем их.

15. Щелчком на кнопке Вид вернитесь в конструктор запроса.

16. В ячейке Поле третьего столбца замените имя Дата на текст Дата первого контакта: Дата. Правая часть этого выражения, расположенная правее двоеточия, по-прежнему задает имя поля, а левая определяет название столбца результата запроса. Таким образом, любому столбцу запроса можно назначить произвольное имя.

17. В ячейке Поле четвертого столбца введите Дата последнего контакта: Дата.

18. В первой строке пятого столбца бланка запроса введите Число контактов: Дата.

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

19. Снова щелкните на кнопке Вид.

20. Закройте запрос.

21. Для сохранения изменений структуры щелкните на кнопке Да.

22. В окне диалога Сохранение введите имя Итоговый запрос и щелкните на кнопке ОК.

Ссылка на основную публикацию
Adblock
detector