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

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

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

Сводка

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

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

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

Способ 1

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

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

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

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

  3. В меню Вид выберите пункт Итоги.

    Примечание В Access 2007 щелкните Итоги в группе Показать и скрыть на вкладке Конструктор .

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

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

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

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

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

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

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

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

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

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

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

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

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

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

    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() для создания выполняющихся итогов над группой.

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

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

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

  3. В меню Вид щелкните Итоги.

    Примечание В Access 2007 щелкните Итоги в группе Показать и скрыть на вкладке Конструктор .

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

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

    Это поле группировано по EmployeeID.

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

    Field: Freight
    Total: Sum
    Show: Yes
    

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

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

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

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

    Выражение в поле Поле использует функцию DSum() для суммирования поля Freight, если Идентификатор сотрудника меньше или равен текущему 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