Создание запроса запущенных итогов в Microsoft Access

Примечание

Office 365 ProPlus переименован в Майкрософт 365 корпоративные приложения. Для получения дополнительной информации об этом изменении прочитайте этот блог.

Расширенный: требуется экспертное кодирование, интероперабельность и многоуровневые навыки.

Эта статья применяется к файлу базы данных Microsoft Access (.mdb) или к файлу базы данных Microsoft Access (.accdb).

Сводка

В этой статье показано два метода, которые можно использовать для создания запроса запущенных итогов. Запрос итогов выполнения — это запрос, в котором общая сумма для каждой записи — это суммирование этой записи и любых предыдущих записей. Этот тип запроса полезен для отображения совокупных итогов в группе записей (или в течение определенного периода времени) в графе или отчете.

Примечание Вы можете увидеть демонстрацию метода, используемого в этой статье в примере файла Qrysmp00.exe.

Дополнительная информация

Способ 1

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

В следующем примере запроса используется таблица Заказов из примерной базы данных Northwind для создания суммы расходов на перевозку за каждый месяц в 1997 году. Выборка данных ограничена одним годом по причинам производительности. Так как функция DSum выполняется один раз для каждой записи запроса, для завершения обработки запроса может потребоваться несколько секунд (в зависимости от скорости компьютера). Чтобы создать и запустить этот запрос, выполните следующие действия:

  1. Откройте пример базы данных Northwind.

  2. Создайте новый выбранный запрос и добавьте таблицу "Заказы".

  3. В меню Просмотр щелкните Итоги.

    Примечание В Access 2007 щелкните Итоги в группе Show/Hide на вкладке Design.

  4. В первом столбце сетки разработки запроса введите следующее выражение в поле Поле и сделайте следующие выборки для полей Total, Sort и Show:

    Field: AYear: DatePart("yyyy",[OrderDate])
    Total: Group By
    Sort: Ascending
    Show: Yes
    

    Выражение в поле Поле отображает и сортирует годовую часть поля OrderDate.

  5. Во втором столбце сетки разработки запросов введите следующее выражение в поле Поле и сделайте следующие выборки для полей Total, Sort и Show:

    Field: AMonth: DatePart("m",[OrderDate])
    Total: Group By
    Sort: Ascending
    Show: Yes
    

    Выражение в поле Поле сортит и отображает месячную часть поля Даты заказа в качестве значения от 1 до 12.

  6. В третьем столбце сетки разработки запросов введите следующее выражение в поле Поле и сделайте следующие выборки для полей Total и Show.

    ПРИМЕЧАНИЕ В следующем примере в качестве символа продолжения строки используется подчеркивать (_) в конце строки. Снимите подчеркивать из конца строки при повторном создании этого примера.

    Field: RunTot: DSum("Freight","Orders","DatePart('m', _
    [OrderDate])<=" & [AMonth] & " And DatePart('yyyy', _
    [OrderDate])<=" & [AYear] & "")
    Total: Expression
    Show: Yes
    

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

  7. В четвертом столбце сетки разработки запросов введите следующее выражение в поле Поле и сделайте следующие выборки для полей Total, Sort и Show:

    Field: FDate: Format([OrderDate],"mmm")
    Total: Group By
    Sort: Ascending
    Show: Yes
    

    Выражение в поле Поле отображает каждый месяц в текстовом формате, таком как Январь, Февраль, Мар и так далее.

  8. В пятом столбце сетки разработки запроса введите следующее выражение в поле Поле и сделайте следующие выборки для полей Total, Criteria и Show:

    Field: DatePart("yyyy",[OrderDate])
    Total: Where
    Criteria: 1997
    Show: No
    

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

  9. Запустите запрос. Обратите внимание, что в поле RunTot отображаются следующие записи с запущенной суммой:

    AYear AMonth RunTot FDate
    --------------------------------------
    1997 1 2238.98 Jan
    1997 2 3840.43 Feb
    1997 3 5729.24 Mar
    1997 4 8668.34 Apr
    1997 5 12129.74 May
    1997 6 13982.39 Jun
    1997 7 17729.29 Jul
    1997 8 22204.73 Aug
    1997 9 26565.26 Sep
    1997 10 32031.38 Oct
    1997 11 36192.09 Nov
    1997 12 42748.64 Dec
    

Способ 2

Второй метод использует запрос итогов с функцией DSum() для создания общего числа для группы.

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

  1. Откройте пример базы данных Northwind.mdb.

  2. Создайте новый выбранный запрос и добавьте таблицу "Заказы".

  3. В Viewmenu щелкните Итоги.

    Примечание В Access 2007 щелкните Итоги в группе Show/Hide на вкладке Design.

  4. В первом столбце сетки разработки запросов добавьте следующее поле в поле Поле и сделайте следующие выборки для полей Total и Show:

    Field: EmpAlias: EmployeeID
    Total: Group By
    Show: Yes
    

    Это поле группит данные employeeID.

  5. Во втором столбце сетки разработки запросов добавьте следующее поле в поле Поле и сделайте следующие выборки для полей Total и Show:

    Field: Freight
    Total: Sum
    Show: Yes
    

    Это поле суммирует данные о перевозке.

  6. В третьем столбце сетки разработки запросов введите следующее выражение в поле Поле и сделайте следующие выборки для полей Total и Show.

    ПРИМЕЧАНИЕ В следующем примере в качестве символа продолжения строки используется подчеркивать (_) в конце строки. Снимите подчеркивать из конца строки при повторном создании этого примера.

    Field: RunTot: Format(DSum("Freight","Orders","[EmployeeID]<=" _& [EmpAlias] & ""),"$0,000.00")
    Total: Expression
    Show: Yes
    

    Выражение в поле Поле использует функцию DSum() для суммы поля Freight, когда EmployeeID меньше или равен текущему EmpAlias, а затем форматирует поле в долларах.

  7. Запустите запрос. Обратите внимание, что в поле RunTot отображаются следующие записи с запущенной суммой:

    Employee SumOfFreight RunTot
    -------------------------------------------------
    Davolio, Nancy $8,836.64 $8,836.64
    Fuller, Andrew $8,696.41 $17,533.05
    Leverling,Janet $10,884.74 $28,417.79
    Peacock, Margaret $11,346.14 $39,763.93
    Buchanan, Steven $3,918.71 $43,682.64
    Suyama, Michael $3,780.47 $47,463.11
    King, Robert $6,665.44 $54,128.55
    Callahan, Laura $7,487.88 $61,616.43
    Dodsworth, Anne $3,326.26 $64,942.69