Функция DSum — Access
Функцию DSum можно использовать для вычисления суммы значений в указанном наборе записей (подмножество). Функция DSum доступна в модулях Visual Basic для приложений (VBA), макросах, выражениях запросов и вычисляемых элементах управления.
Например, функцию DSum можно использовать в выражении вычисляемого поля запроса, вычисляющего объем продаж для конкретного сотрудника за определенный период времени. Функцию DSum также можно использовать в вычисляемом элементе управления для отображения текущей суммы продаж конкретного продукта.
DSum ( выражение , подмножество [, условия] )
Аргументы функции DSum описаны ниже.
Аргумент | Описание |
---|---|
выражение |
Обязательный аргумент. Выражение, определяющее числовое поле, значения которого нужно просуммировать. Это может быть строковое выражение, которое определяет поле в таблице или запросе, либо выражение, которое выполняет вычисление данных в этом поле. В выражение можно включить имя поля в таблице, элемента управления в форме, константы или функции. Выражение может включать в себя встроенную или пользовательскую функцию, но не другую агрегатную функцию по подмножеству или агрегатную функцию SQL. |
подмножество |
Обязательный аргумент. Строковое выражение, определяющее набор записей, которые образуют подмножество. Это может быть имя таблицы или имя запроса, для которого не требуются параметры. |
условия |
Необязательный аргумент. Строковое выражение, используемое для ограничения диапазона данных, к которому применяется функция DSum. Например, условия часто эквивалентны предложению WHERE в выражении SQL (без слова WHERE). Если условия не указаны, функция DSum применяет выражение ко всему подмножеству. Любое поле, включенное в условия, должно также входить в подмножество. Иначе функция DSum возвращает значение NULL. |
Замечания
Если ни одна из записей не соответствуют аргументу условия или подмножество не содержит записей, функция DSum возвращает значение NULL.
Где бы ни использовалась функция DSum — в макросе, модуле, выражении запроса или вычисляемом элементе управления — необходимо аккуратно задать условия, чтобы обеспечить ее правильное вычисление.
С помощью функции DSum вы можете указать условия в строке Условие отбора запроса, в вычисляемом поле выражения запроса или в строке Обновление запроса на обновление.
Примечание: Функцию DSum или Sum также можно использовать в выражении вычисляемого поля в итоговом запросе. При использовании функции
Вы можете предпочесть функцию DSum, если нужно отобразить сумму набора значений из поля, не относящегося к источнику записей для формы или отчета. Например, у вас есть форма, в которой отображается информация о конкретном продукте. С помощью функции DSum вы можете отображать текущий объем продаж продукта в вычисляемом элементе управления.
Совет
Для отображения текущего суммарного значения в элементе управления отчета можно использовать свойство RunningSum этого элемента управления, если взятое за основу поле включено в источник записей для отчета. Используйте функцию DSum для отображения текущей суммы в форме.Примечание: Несохраненные изменения в записях, входящих в подмножество, не учитываются при использовании этой функции. Если вы хотите, чтобы в функции DSum учитывались измененные значения, необходимо сначала сохранить изменения. Для этого нажмите кнопку Сохранить запись в группе Записи на вкладке Главная, переместите фокус на другую запись или используйте метод Update.
Примеры
DSum("[Quantity]*[UnitPrice]", "Order Details", _
"[ProductID] = "& [ProductID])
При выполнении запроса Access вычисляет общий объем продаж для каждого продукта, исходя из данных таблицы «Сведения о заказах» (Order Details). Сумма продаж для каждого продукта добавляется в таблицу «Продукты».
Использование функции DSum в коде VBA
Примечание: В приведенных ниже примерах показано, как использовать эту функцию в модуле Visual Basic для приложений (VBA). Чтобы получить дополнительные сведения о работе с VBA, выберите
В этом примере суммируются значения из поля «Поставка» (Freight) для заказов, доставленных в Великобританию. Подмножеством является таблица «Заказы» (Orders). Аргумент условия ограничивает результирующий набор теми записями, в которых в качестве региона доставки указано Соединённое Королевство (UK).
Dim curX As Currency
curX = DSum("[Freight]", "Orders", _
"[ShipCountryRegion] = 'UK'")
В следующем примере для вычисления итогового значения применяются два отдельных условия. Обратите внимание на то, что в строковом выражении используются одинарные кавычки (‘) и знаки номера (#), так что при соединении строк строковый литерал заключается в одинарные кавычки, а дата — в символы решетки.
Dim curX As Currency
curX = DSum("[Freight]", "Orders", _
"[ShipCountryRegion] = 'UK' AND _
[ShippedDate] > #1-1-95#")
Метод Application. DSum (Access) | Microsoft Docs
- Чтение занимает 3 мин
В этой статье
С помощью функции DSum можно вычислить сумму набора значений в заданном наборе записей (подмножестве). You can use the DSum function to calculate the sum of a set of values in a specified set of records (a domain).
СинтаксисSyntax
Expression. DSum (выражение, домен, критерии)expression.DSum (Expr, Domain, Criteria)
выражение: переменная, представляющая объект Application.expression A variable that represents an Application object.
ПараметрыParameters
ИмяName | Обязательный или необязательныйRequired/Optional | Тип данныхData type | ОписаниеDescription |
---|---|---|---|
ВыраженExpr | ОбязательныйRequired | StringString | Выражение, определяющее числовое поле, значения которого необходимо суммировать.An expression that identifies the numeric field whose values you want to total. Это может быть строковое выражение, идентифицирующее поле в таблице или запросе, или выражение, которое выполняет вычисление данных в этом поле.It can be a string expression identifying a field in a table or query, or it can be an expression that performs a calculation on data in that field. В _выражение_можно включить имя поля в таблице, элемент управления в форме, константу или функцию.In expr, you can include the name of a field in a table, a control on a form, a constant, or a function. Если выражение содержит функцию, оно может быть либо встроенным, либо пользовательским, но не другим статистическим выражением или статистической функцией SQL.If expr includes a function, it can be either built-in or user-defined, but not another domain aggregate or SQL aggregate function. |
ДоменDomain | ОбязательныйRequired | StringString | Строковое выражение, определяющее набор записей, входящих в домен. A string expression identifying the set of records that constitutes the domain. Это может быть имя таблицы или имя запроса для запроса, для которого не требуется параметр.It can be a table name or a query name for a query that does not require a parameter. |
CriteriaCriteria | НеобязательныйOptional | VariantVariant | Необязательное строковое выражение, используемое для ограничения диапазона данных, в котором выполняется функция DSum .An optional string expression used to restrict the range of data on which the DSum function is performed. Например, критерии часто эквивалентны предложению WHERE в выражении SQL без слова WHERE.For example, criteria is often equivalent to the WHERE clause in an SQL expression, without the word WHERE. Если критерии опущены, функция DSum вычисляет выражение для всего домена.If criteria is omitted, the DSum function evaluates expr against the entire domain. Любое поле, включенное в критерии , также должно быть полем в домене; в противном случае функция DSum возвращает значение NULL.Any field that is included in criteria must also be a field in domain; otherwise, the DSum function returns a Null. |
Возвращаемое значениеReturn value
VariantVariant
ПримечанияRemarks
Например, можно использовать функцию DSum в выражении вычисляемого поля в запросе, чтобы рассчитать общее количество продаж, выполненных определенным сотрудником в течение определенного периода времени.For example, you could use the DSum function in a calculated field expression in a query to calculate the total sales made by a particular employee over a period of time. Кроме того, можно использовать функцию DSum в вычисляемом элементе управления для отображения суммы продаж для конкретного продукта.Or you could use the DSum function in a calculated control to display a running sum of sales for a particular product.
Если ни одна запись не удовлетворяет аргументу условия_отбора или если домен не содержит записей, функция DSum возвращает значение NULL.If no record satisfies the criteria argument, or if domain contains no records, the DSum function returns a Null.
Независимо от того, используется ли функция DSum в макросе, модуле, выражении запроса или вычисляемом элементе управления, необходимо тщательно сформировать аргумент условия , чтобы убедиться, что он будет оцениваться правильно.Whether you use the DSum function in a macro, module, query expression, or calculated control, you must construct the criteria argument carefully to ensure that it will be evaluated correctly.
С помощью функции DSum можно задать условия в строке запроса условия запроса, вычисляемое поле в выражении запроса или в строке Обновление запроса на обновление.You can use the DSum function to specify criteria in the Criteria row of a query, in a calculated field in a query expression, or in the Update To row of an update query.
Примечание
Можно использовать функцию DSum или Sum в выражении вычисляемого поля в запросе итогов.You can use either the DSum or Sum function in a calculated field expression in a totals query. Если используется функция DSum , значения рассчитываются до группирования данных.If you use the DSum function, values are calculated before data is grouped. Если используется функция Sum , данные группируются до оценки значений в выражении поля.If you use the Sum function, the data is grouped before values in the field expression are evaluated.
Вы можете использовать функцию DSum , если вам нужно отобразить сумму набора значений из поля, которое не находится в источнике записей формы или отчета.You may want to use the DSum function when you need to display the sum of a set of values from a field that is not in the record source for your form or report. Например, предположим, что у вас есть форма, в которой отображаются сведения о конкретном продукте.For example, suppose you have a form that displays information about a particular product. Вы можете использовать функцию DSum , чтобы обеспечить выполнение общей суммы продаж этого продукта в вычисляемом элементе управления.You could use the DSum function to maintain a running total of sales of that product in a calculated control.
Если необходимо хранить сумму с накоплением в элементе управления в отчете, можно использовать свойство Сумма (RunningSum ) этого элемента управления, если поле, на основе которого основано, включено в источник записей для отчета.If you need to maintain a running total in a control on a report, you can use the RunningSum property of that control if the field on which it is based is included in the record source for the report. Используйте функцию DSum для сохранения суммы с накоплением в форме.Use the DSum function to maintain a running sum on a form.
ПримерExample
Приведенный ниже пример суммирует значения из поля фрахта для заказов, отправляемых в Соединенное Королевство.The following example totals the values from the Freight field for orders shipped to the United Kingdom. Домен является таблицей Orders.The domain is an Orders table. Аргумент условия_отбора запрещает результирующий набор записей для тех, для которых ШИПКАУНТРИ равняется Великобритании.The criteria argument restricts the resulting set of records to those for which ShipCountry equals UK.
Dim curX As Currency
curX = DSum("[Freight]", "Orders", "[ShipCountry] = 'UK'")
В следующем примере сумма вычисляется с помощью двух отдельных условий.The next example calculates a total by using two separate criteria. Обратите внимание, что одинарные кавычки (‘) и решетки (#) включены в строковое выражение, поэтому при сцеплении строк строковый литерал будет заключен в одинарные кавычки, а дата будет заключена в знаки решетки.Note that single quotation marks (‘) and number signs (#) are included in the string expression, so that when the strings are concatenated, the string literal will be enclosed in single quotation marks, and the date will be enclosed in number signs.
Dim curX As Currency
curX = DSum("[Freight]", "Orders", _
"[ShipCountry] = 'UK' AND [ShippedDate] > #1-1-95#")
В следующих примерах показано, как использовать различные типы условий с помощью функции DSum .The following examples show how to use various types of criteria with the DSum function.
' ***************************
' Typical Use
' Numerical values. Replace "number" with the number to use.
variable = DSum("[FieldName]", "TableName", "[Criteria] = number")
' Strings.
' Numerical values. Replace "string" with the string to use.
variable = DSum("[FieldName]", "TableName", "[Criteria]= 'string'")
' Dates. Replace "date" with the string to use.
variable = DSum("[FieldName]", "TableName", "[Criteria]= #date#")
' ***************************
' ***************************
' Referring to a control on a form
' Numerical values
variable = DSum("[FieldName]", "TableName", "[Criteria] = " & Forms!FormName!ControlName)
' Strings
variable = DSum("[FieldName]", "TableName", "[Criteria] = '" & Forms!FormName!ControlName & "'")
' Dates
variable = DSum("[FieldName]", "TableName", "[Criteria] = #" & Forms!FormName!ControlName & "#")
' ***************************
' ***************************
' Combinations
' Multiple types of criteria
variable = DSum("[FieldName]", "TableName", "[Criteria1] = " & Forms![FormName]![Control1] _
& " AND [Criteria2] = '" & Forms![FormName]![Control2] & "'" _
& " AND [Criteria3] =#" & Forms![FormName]![Control3] & "#")
' Use two fields from a single record.
variable = DSum("[LastName] & ', ' & [FirstName]", "tblPeople", "[PrimaryKey] = 7")
' Expressions
variable = DSum("[Field1] + [Field2]", "tableName", "[PrimaryKey] = 7")
' Control Structures
variable = DSum("IIf([LastName] Like 'Smith', 'True', 'False')", "tableName", "[PrimaryKey] = 7")
' ***************************
Поддержка и обратная связьSupport and feedback
Есть вопросы или отзывы, касающиеся Office VBA или этой статьи?Have questions or feedback about Office VBA or this documentation? Руководство по другим способам получения поддержки и отправки отзывов см. в статье Поддержка Office VBA и обратная связь.Please see Office VBA support and feedback for guidance about the ways you can receive support and provide feedback.
Иллюстрированный самоучитель по Microsoft Access 2002 › Создание составных форм › Использование статистических функций в формах [страница — 318] | Самоучители по офисным пакетам
Использование статистических функций в формах
Функция DLookup
Обычно используется для вывода в форме значения поля из таблицы, не входящей в базовый запрос. Например, в форме «Заказы» (Orders) можно отобразить дополнительные поля из таблицы «Клиенты» (Customers), которые не были включены в базовый запрос. Например, чтобы отобразить значение поля «Телефон» (Phone), в качестве значения свойства Данные (Control Source) вычисляемого элемента управления нужно ввести следующее выражение:
=
DLookup(
"[Телефон]"
;
"[Клиенты]"
;
"[КодКлиента] = '"
& Forms!{Заказы]![КодКлиента] & '
""
)
Для английской версии Access:
=
DLookUp(
"[Phone]"
;
"[Customers]"
;
"[CustomerlD] = '"
& Forms![Orders]![CustomerlD] &
"'"
)
Критерием для выбора записи из таблицы «Клиенты» (Customers) является поле «КодКлиента» (CustomerlD) в форме «Заказы» (Orders).
Замечание
В данном случае выбор записей идет по полю текстового типа «КодКлиента» (CustomerlD), поэтому условие на его значение должно задаваться в виде строки, заключенной в кавычки или апострофы. Для этого необходима конкатенация заданного в условии значения с двух сторон с апострофом или кавычкой. Включение апострофа в строку не отличается от включения обычной буквы или цифры, а чтобы включить в строку символ кавычки, ее придется удвоить, чтобы она отличалась от кавычек, ограничивающих само строковое значение. Таким образом, если строка состоит из одной кавычки, она будет выглядеть так: «»»», в нашем примере для задания условия на текстовое значение мы использовали апострофы.
Функции Dcount и DSum
Предположим, в форме «Заказы» (Orders) требуется создать вычисляемые поля для отображения количества заказов, сделанных клиентом, и общей суммы заказов. Для этого нужно создать два вычисляемых поля, а в качестве значений свойства Данные (Control Source) ввести следующие выражения:
=
DCount(
"[КодЗаказа]"
;
"[Заказы]"
;
"[КодКлиента] = '"
& Forms![Заказы]![КодКлиента] & '
""
)
=
DSum(
"[ОтпускнаяЦена]"
;
"'[Счета]"
;
"[КодКлиента] = '"
& Forms![Заказы]![КодКлиента] &
"'"
)
Для английской версии Access, соответственно:
=
DCount(
"[OrderID]"
;
"[Orders]"
;
"[CustomerlD] = '"
& Forms![Orders]![CustomerlD] &
)
Функция DMax
Часто требуется организовать счетчик в одном из полей формы, например номер заказа должен при вводе каждой новой записи увеличиваться на единицу. Стандартный тип поля Счетчик (AutoNumber) не всегда подходит для этих целей, т. к. значение в поле такого типа нельзя вводить вручную. Если должна допускаться ручная корректировка номера заказа, удобнее для хранения номера заказа добавить в таблицу обычное числовое поле, а в форму поместить присоединенное к нему вычисляемое поле, у которого в свойстве Значение по умолчанию (Default Value) задано выражение:
=
DMax(
"[КодЗаказа]"
;
"[Заказы]"
)
+
1
Для английской версии:
=
DMax(
"[OrderlD]"
;
"[Orders]"
)
+
1
Суммирование по множеству условий функцией БДСУММ (DSUM)
Для выборочного подсчета по нескольким условиям в больших таблицах можно использовать несколько способов: фильтры, сводные таблицы, функции СУММЕСЛИ и СУММЕСЛИМН и т.д.
Еще одним, относительно экзотическим, но весма мощным инструментом является функция БДСУММ (DSUM) из категории Работа с базой данных (Database). При внешней простоте, она позволяет гибко фильтровать списки по нескольким сложным и связанным между собой условиям и подсчитывает сумму найденных записей по заданному столбцу. Синтаксис функции таков:
=БДСУММ(Исходные_данные; Столбец_результата; Диапазон_условий)
где
- Исходные_данные — диапазон, включающий в себя таблицу с данными, которые мы анализируем и строкой заголовка.
- Столбец_результата — название (из шапки таблицы) или порядковый номер столбца, по которому нужно просуммировать данные.
- Диапазон_условий — диапазон, содержащий названия столбцов и условия по ним.
Чтобы удобнее было ссылаться эту таблицу в будущем, конвертируем ее в «умную» командой Форматировать как таблицу на вкладке Главная (Home — Format as Table) или сочетанием клавиш Ctrl+T. На появившейся затем вкладке Конструктор (Design) зададим ей имя — например БазаДанных.
Простая сумма по одному условию
Начнем с простого случая. Допустим, нам нужно просуммировать стоимость по всем сделкам сока Добрый. Это будет выглядеть следующим образом:
Обратите внимание на следующие моменты:
- Не достаточно просто написать имя умной таблицы БазаДанных в первом аргументе, т.к. в этом случае ссылка не включает шапку, а для функции БДСУММ она необходима. Поэтому к имени добавляется тег [#Все] или, в английском варианте [#All].
- Столбец, по которому нужно просуммировать данные можно задать либо названием («Стоимость»), либо номером (было бы 5).
- Название столбца в желтом диапазоне условий должно один-в-один совпадать с названием в исходной таблице.
- Функция БДСУММ не различает регистр символов (добрый = ДОБРЫЙ = Добрый = ДоБрЫй и т.д.)
- Чтобы критерий в желтой ячейке А2 Excel не начал понимать как формулу (т.к. формулы обычно начинаются со знака равно) можно использовать текстовый формат или просто начать ввод в ячейку с апострофа:
Приблизительный и точный текстовый поиск
При необходимости, можно легко реализовать не только точный, но и приблизительный текстовый поиск. Посмотрите внимательно на следующие варианты суммирования выручки по городу Абакан и разницу между ними:
- Если нужен поиск точного соответствия, то используем конструкцию ‘= (апостроф и знак равно).
- Если нужен поиск подстроки, т.е. всех ячеек, которые содержат нужное значение, то его надо заключить в звездочки. В нашем случае будут просуммированы все варианты Абакана (с «г.», без «г.», с пробелами перед-после и т.п.)
- Если просто ввести значение без равно и звездочек, то будут найдены и просуммированны все строки, где содержимое начинается с указанного значения, т.е. это равноценно звездочке в конце.
Несколько условий со связками «И» — «ИЛИ»
Если нужно просуммировать данные по нескольким условиям, связанным друг с другом логическим оператором И (AND), то ячейки с этими условиями должны быть в одной строке. Например, если нужно просуммировать все продажи Fanta по Абакану (в любом виде его написания), то это будет выглядеть так:
Если же нужно связать несколько условий логическим оператором ИЛИ (OR), то их нужно расположить в разных строчках. Например, если нужно просуммировать деньги по всем вариантам написания «города на Неве», коих великое множество:
И конечно же, можно комбинировать оба подхода, сочетания в одном запросе условия со связками И и ИЛИ одновременно:
В этом случае вычисляется сумма продаж Fanta в Абакане и Burn у Дубинина.
Суммирование по интервалу дат
В диапазоне условий можно легко задать интервал дат для подсчета. Если интервал ограничен с двух сторон, то нужно будет задать два условия, связанных между собой логическим «И» — поэтому придется писать условия в одной строке, т.е. добавить еще один столбец с тем же названием Дата сделки:
В данном случае вычисляется сумма продаж Fanta за 2016 год и Фруктайм до 2016 года.
Условия для чисел
Для отбора по числовым критериям можно смело использовать обычные знаки неравенств >, <, >=, <= как и в обычных формулах Excel. Например, если нам нужно просуммировать все продажи любых видов колы, где сумма сделки была в интервале 500-600:
Исключения «все кроме»
Если нужно при суммировании исключить записи по какому-либо параметру, то можно использовать символы «<>» обозначающие «не равно» в синтаксисе Excel. Допустим, нам нужно просуммировать все данные по Fanta кроме Самары и по Квасу кроме Пензы — это будет выглядеть так:
Обратите внимание, что если нужно просуммировать Fant’у И Квас по всем городам, кроме Самары И Пензы, то конструкция таблицы условий будет уже немного другая — для каждого товара нужно исключить каждый город:
Заключение
Надеюсь, вы уже поняли, что функция БДСУММ является очень неплохим инструментом и, зачастую, более удобной альтернативой классическим функциям выборочного подсчета типа СУММЕСЛИ (SUMIF) и СУММЕСЛИМН (SUMIFS). Кроме того, в той же категории Работа с базой данных (Database) можно найти ее «подруг», вычисляющих не только сумму:
- БСЧЁТ (DCOUNTA) — количество непустых ячеек (в нашем случае — строк заказов)
- ДМИН (DMIN) — минимальное (например, худшая сделка)
- ДМАКС (DMAX) — максимальное (лучшая сделка)
- ДСРЗНАЧ (DAVERAGE) — среднее арифметическое (например, средний чек)
Ссылки по теме
Трюки с запросами, использующими агрегатные доменные функции — Запросы — Access — Каталог статей
Рано или поздно, но любой разработчик или профессиональный аналитик сталкивается с ситуацией, что проект перерастает возможности Excel и необходимо часть работы переложить с электронной таблицы на реляционную базу данных. В случае MS Office это, понятное дело, — MS Access. В виду этого на моём сайте будут появляться материалы и об Access.
Начну с малоизвестных широкой публике примеров использования доменных агрегатных функциях в запросах, при помощи которых можно делать интересные вещи. Данный материал предназначен пользователям, которые уже освоили основные виды запросов в MS Access. Сегодня обсудим 2 задачи:
Подсчёт процентной величины в записях запроса относительно сумманой величины по всему набору данных
Подсчёт в запросе какой-либо величины нарастающим итогом
Термины
Доменные агрегаты — это функции, такие как: Dsum, Dcount, Davg, Dmin, Dmax, Dfirst, Dlast, DLookup и некоторые другие. Данные функции производят какую-либо групповую операцию над всем набором данных (доменом) и возвращают результат в виде числа. Например, вызов такой функции DSUM(«[Amount]», «Sales») вернёт нам итоговоую сумму по полю Amount в таблице Sales.
Подсчёт процентной величины
В этом примере мы подсчитываем сумму проданного товара (поле [Count]) по каждому коду продукта (поле [ProductCode]), а также процентную величину, которую занимает сумма по каждому коду относительно суммы по всем кодам продуктов.
Запрос в конструкторе выглядит следующим образом:
SQL оператор
можно и так — без промежуточного поля [SCount]
Обратите внимание, что конструкция DSUM будет возвращать в каждую запись набора одно и тоже число
Подсчёт величины нарастающим итогом
Здесь мы в поле [RT] подсчитываем нарастающим итогом количество заказов с группировкой по дате заказа (поле [OrderDate]). То есть каждый последующий день включает в себя количество заказов за эту дату плюс все предыдущие даты.
Запрос в конструкторе:
SQL оператор
Комментарии:
Обратите внимание на то, как офомлен третий параметр в функции Dcount. Это выстраданный синтаксис, так как функция Dcount работает с датами только в стандартном формате вида #mm/dd/yyyy#.
В англоязычных книгах рекомендуют следующий формат DCount(«[OrderID]»,»Orders»,»[OrderDate] OrderDate] & «#»), но он не работает с нашими региональными настройками, поэтому — только так, как показано.
Трюк с нарастающим итогом, как не трудно догадаться, кроется в знаке меньше или равно и динамическим формированием условия выборки.
MS Access — встроенные функции
В этой главе мы будем работать со встроенными функциями. В Access доступно около сотни встроенных функций, и практически невозможно охватить каждую из них. В этой главе мы расскажем об основной структуре, синтаксисе и использовании некоторых из наиболее популярных функций, а также о подводных камнях, чтобы вы могли самостоятельно изучить некоторые другие функции.
функции
Функция — это процедура VBA, которая выполняет задачу или вычисление и возвращает результат. Функции обычно можно использовать в запросах, но есть и другие места, где вы можете использовать функции.
Вы можете использовать функции в свойствах таблицы, например, если вы хотите указать значение по умолчанию для поля даты / времени, вы можете использовать функцию date или Now, чтобы вызвать информацию о текущей дате / времени из вашей системы, и ввести это значение автоматически.
Вы также можете использовать функции в выражении при создании вычисляемого поля или использовать функции внутри формы или элементов управления отчетом. Вы можете использовать функции даже в макросах.
Функции могут быть довольно простыми, не требующими вызова другой информации, или просто ссылаться на одно поле из таблицы или запроса.
С другой стороны, они также могут быть довольно сложными, с несколькими аргументами, ссылками на поля и даже другими функциями, вложенными в другую функцию.
Вы можете использовать функции в свойствах таблицы, например, если вы хотите указать значение по умолчанию для поля даты / времени, вы можете использовать функцию date или Now, чтобы вызвать информацию о текущей дате / времени из вашей системы, и ввести это значение автоматически.
Вы также можете использовать функции в выражении при создании вычисляемого поля или использовать функции внутри формы или элементов управления отчетом. Вы можете использовать функции даже в макросах.
Функции могут быть довольно простыми, не требующими вызова другой информации, или просто ссылаться на одно поле из таблицы или запроса.
С другой стороны, они также могут быть довольно сложными, с несколькими аргументами, ссылками на поля и даже другими функциями, вложенными в другую функцию.
Давайте теперь посмотрим на некоторые примеры использования встроенных функций.
Функции даты и времени
Давайте теперь поймем функции даты и времени —
Функция Date () предназначена для возврата текущей системной даты. Эта функция не требует никаких аргументов функции или дополнительной информации. Все, что вам нужно сделать, это написать имя функции, а также открыть и закрыть скобки.
Есть две очень похожие встроенные функции Time () и Now ().
Функция Time () возвращает только текущее системное время, а функция Now () возвращает как текущую системную дату, так и время.
В зависимости от данных, которые вы хотите отслеживать, или хранить, или запрашивать, у вас есть три встроенные, простые в использовании функции, которые помогут с этой задачей.
Функция Date () предназначена для возврата текущей системной даты. Эта функция не требует никаких аргументов функции или дополнительной информации. Все, что вам нужно сделать, это написать имя функции, а также открыть и закрыть скобки.
Есть две очень похожие встроенные функции Time () и Now ().
Функция Time () возвращает только текущее системное время, а функция Now () возвращает как текущую системную дату, так и время.
В зависимости от данных, которые вы хотите отслеживать, или хранить, или запрашивать, у вас есть три встроенные, простые в использовании функции, которые помогут с этой задачей.
Теперь давайте откроем вашу базу данных и создадим новый запрос, используя дизайн запроса, и добавим tblProjects и tblTasks.
Добавьте ProjectName из tblProjects и TaskTitle, StartDate и DueDate из tblTasks и выполните свой запрос.
Теперь вы можете увидеть все различные задачи из всех проектов. Если вы хотите просмотреть задачи проекта, которые выполняются по состоянию на сегодняшнюю дату, то мы должны указать критерий, используя функцию Date () для просмотра проектов, которые начинаются в или после сегодняшней даты.
Давайте теперь укажем критерии под StartDate.
Критерий начинается с оператора, большего, чем символ , за которым следует символ равенства, а затем функция даты .
Когда мы запустим этот запрос, все задачи будут выполнены в текущую дату или в будущем, как показано на следующем снимке экрана.
Это был пример того, как вы можете использовать функцию Date () в качестве критерия запроса.
Давайте теперь скажем, что этот запрос должен быть более гибким с точки зрения дат, которые он запрашивает, начиная с этой недели.
У нас есть несколько разных задач, которые начались на этой неделе, и которые не отображаются в этом списке из-за наших критериев. Он смотрит на даты начала, которые равны сегодня или выше.
Давайте теперь скажем, что этот запрос должен быть более гибким с точки зрения дат, которые он запрашивает, начиная с этой недели.
У нас есть несколько разных задач, которые начались на этой неделе, и которые не отображаются в этом списке из-за наших критериев. Он смотрит на даты начала, которые равны сегодня или выше.
Если мы хотим просмотреть задачи, которые начались на этой неделе, которые еще не выполнены или должны быть выполнены сегодня, вернемся к представлению «Дизайн».
Здесь мы добавим дополнительную информацию к этим критериям. На самом деле, мы хотим, чтобы оно было больше или равно сегодняшней дате минус семь дней.
Если мы введем минус семь и запустим запрос, вы сможете увидеть задачи, которые начались на этой неделе.
Функция DateDiff ()
Функция DateDiff () — еще одна очень популярная функция даты / времени. Функция DateDiff возвращает Variant (long), указывающий количество временных интервалов между двумя указанными датами. Другими словами, он вычисляет разницу между двумя датами, и вы выбираете интервал, по которому функция рассчитывает эту разницу.
Давайте теперь скажем, что мы хотим рассчитать возраст наших авторов. Для этого нам сначала нужно создать новый запрос и добавить таблицу авторов, а затем добавить поля FirstName, LastName и BirthDay.
Мы можем рассчитать возраст людей, вычислив разницу между их датой рождения или днем рождения и какой бы ни была сегодняшняя дата.
Давайте попробуем использовать функцию DateDiff в новом поле.
Давайте назовем его Age, затем двоеточие, а затем напишем DateDiff Function.
- Первым аргументом функции для функции DateDiff является интервал, поэтому введите «гггг».
- Следующий аргумент функции — это первая дата, по которой мы хотим вычислить, которая в этом случае будет полем дня рождения.
- Третий аргумент функции — какая бы ни была сегодняшняя дата.
Теперь запустите ваш запрос, и вы увидите новое поле, в котором указан возраст каждого автора.
Функция Format ()
Функция Format () возвращает строку, содержащую выражение, отформатированное в соответствии с инструкциями, содержащимися в выражении формата. Вот список пользовательских форматов, которые можно использовать в функции Format ().
настройка | Описание |
---|---|
гггг | Год |
Q | четверть |
м | Месяц |
Y | День года |
d | День |
вес | будний день |
WW | Неделю |
час | Час |
N | минут |
s | второй |
Давайте теперь вернемся к вашему запросу и добавим в него дополнительные поля с помощью функции Format ().
Введите функцию форматирования. Первым аргументом функции будет выражение, которое может быть почти любым. Давайте теперь будем иметь поле дня рождения первым, а следующее — написать наш формат. В этом случае нам нужен месяц, месяц, день, день. Напишите «mmdd» в кавычках, а затем выполните запрос.
Теперь он берет дату из поля дня рождения, 4 — месяц, а 17 — день.
Давайте добавим «mmm» и «mmmm» вместо «mmdd» в следующих полях, как на следующем скриншоте.
Запустите ваш запрос, и вы увидите результаты, как на следующем скриншоте.
В следующем поле возвращаются первые 3 символа из названия месяца для этого дня рождения, а в последнем поле вы получите полное название месяца.
Чтобы увидеть месяц, за которым следует год от дня рождения, давайте добавим «гггг», а также показано на следующем скриншоте.
Позвольте нам снова запустить ваш запрос.
Теперь вы увидите месяц с запятой, а затем год.
IIf () Функция
Функция IIf () является аббревиатурой от «Immediate If», и эта функция оценивает выражение как true или false и возвращает значение для каждого. Имеет до трех аргументов функции, все из которых являются обязательными.
- Первый аргумент — это любое выражение, которое вы хотите оценить.
- Следующий аргумент обозначает истинную часть, которая может быть значением или выражением, возвращаемым, если ваше первое выражение истинно.
- Последний аргумент — это то, что вы хотите вернуть, если ваше выражение ложно.
пример
Давайте возьмем простой пример. Мы создадим новый запрос, используя дизайн запроса, добавим таблицу tblAuthors, а затем добавим следующие поля.
Теперь вы можете видеть, что у нас есть три поля — FirstName, MiddleInitial, LastName, а затем это объединенное поле, которое объединяет все три поля. Давайте запустим ваш запрос, чтобы увидеть результат этого запроса.
Теперь вы можете увидеть результат запроса, но вы также заметите, что некоторые записи не имеют среднего начального значения. Например, запись Джойса Дайера не имеет средней инициалы, но в поле FullName вы увидите период, который действительно не должен быть там. Итак, вернитесь к представлению «Дизайн». Здесь мы сцепим имя другим способом, используя функцию IIf.
Давайте напишем имя в другом поле и назовем его FullName1, а затем наберем функцию IIf.
Первым аргументом функции для Immediate If будет ваше выражение. В выражении мы увидим, является ли среднее начальное поле пустым или нулевым.
Следующий аргумент — это истинная часть. Итак, если средний инициал равен нулю, мы бы хотели отобразить FirstName и LastName.
Теперь для нашей ложной части — если MiddleInitial не равно NULL, то мы бы хотели отобразить FirstName, MiddleInitial и LastName.
Первым аргументом функции для Immediate If будет ваше выражение. В выражении мы увидим, является ли среднее начальное поле пустым или нулевым.
Следующий аргумент — это истинная часть. Итак, если средний инициал равен нулю, мы бы хотели отобразить FirstName и LastName.
Теперь для нашей ложной части — если MiddleInitial не равно NULL, то мы бы хотели отобразить FirstName, MiddleInitial и LastName.
Теперь давайте запустим ваш запрос, и вы увидите результаты, как на следующем скриншоте.
DSum Function — доступ
Функцию DSum можно использовать для вычисления суммы набора значений в указанном наборе записей (домене). Используйте функцию DSum в модуле Visual Basic для приложений (VBA), макросе, выражении запроса или вычисляемом элементе управления.
Например, вы можете использовать функцию DSum в выражении вычисляемого поля в запросе для расчета общих продаж, произведенных конкретным сотрудником за период времени.Или вы можете использовать функцию DSum в вычисляемом элементе управления для отображения текущей суммы продаж для определенного продукта.
Синтаксис
DSum ( выражение , домен [, критерии ] )
Синтаксис функции DSum имеет следующие аргументы:
Аргумент | Описание |
---|---|
выражение | Обязательно.Выражение, определяющее числовое поле, значения которого вы хотите суммировать. Это может быть строковое выражение, идентифицирующее поле в таблице или запросе, или выражение, которое выполняет вычисление данных в этом поле. В expr вы можете включить имя поля в таблице, элемент управления в форме, константу или функцию. Если expr включает функцию, она может быть встроенной или определяемой пользователем, но не другой агрегатной функцией домена или агрегатной функцией SQL. |
домен | Обязательно.Строковое выражение, определяющее набор записей, составляющих домен. Это может быть имя таблицы или имя запроса для запроса, не требующего параметра. |
критериев | Необязательно. Строковое выражение, используемое для ограничения диапазона данных, для которых выполняется функция DSum .Например, критерий часто эквивалентен предложению WHERE в выражении SQL без слова WHERE. Если критериев опущено, функция DSum оценивает expr для всего домена. Любое поле, которое входит в критерий , также должно быть полем в домене ; в противном случае функция DSum возвращает Null. |
Примечания
Если ни одна запись не удовлетворяет критерию аргумент или домен не содержит записей, функция DSum возвращает значение Null.
Независимо от того, используете ли вы функцию DSum в макросе, модуле, выражении запроса или вычисляемом элементе управления, необходимо тщательно сконструировать аргумент критериев , чтобы гарантировать, что он будет вычислен правильно.
Функцию DSum можно использовать для указания критериев в строке Критерии запроса, в вычисляемом поле в выражении запроса или в строке Обновить до запроса на обновление.
Примечание: Вы можете использовать функцию DSum или Sum в выражении вычисляемого поля в итоговом запросе.Если вы используете функцию DSum , значения вычисляются до группировки данных. Если вы используете функцию Sum , данные группируются до оценки значений в выражении поля.
Вы можете использовать функцию DSum , когда вам нужно отобразить сумму набора значений из поля, которого нет в источнике записей для вашей формы или отчета. Например, предположим, что у вас есть форма, в которой отображается информация о конкретном продукте.Вы можете использовать функцию DSum для ведения промежуточной суммы продаж этого продукта в вычисляемом элементе управления.
подсказка
Если вам необходимо вести промежуточную сумму в элементе управления отчета, вы можете использовать свойство RunningSum этого элемента управления, если поле, на котором он основан, включено в источник записей для отчета. Используйте функцию DSum, чтобы вести текущую сумму в форме.
Примечание: Несохраненные изменения записей в домене не включаются при использовании этой функции.Если вы хотите, чтобы функция DSum основывалась на измененных значениях, вы должны сначала сохранить изменения, щелкнув Сохранить запись в группе Records на вкладке Home , переместив фокус на другую запись или с помощью метода Update .
Примеры
Использование функции DSum в выражении Вы можете использовать функцию домена (например, DSum ) в строке Обновить до запроса на обновление.Например, предположим, что вы хотите отслеживать текущие продажи по продуктам в таблице «Продукты». Вы можете добавить новое поле с названием SalesSoFar в таблицу Products и запустить запрос на обновление, чтобы вычислить правильные значения и обновить записи. Для этого создайте новый запрос на основе таблицы Products и на вкладке Design в группе Query Type щелкните Update . Добавьте поле SalesSoFar в сетку запроса и введите следующее в строке Обновить до :
DSum ("[Количество] * [UnitPrice]", "Сведения о заказе", _
"[ProductID] =" & [ProductID])
Когда вы запускаете запрос, Access вычисляет общую сумму продаж для каждого продукта на основе информации из таблицы сведений о заказе.Сумма продаж для каждого продукта добавляется в таблицу «Товары».
Используйте DSum в коде VBA
Примечание. Примеры, которые следуют ниже, демонстрируют использование этой функции в модуле Visual Basic для приложений (VBA). Для получения дополнительной информации о работе с VBA выберите Developer Reference в раскрывающемся списке рядом с Search и введите один или несколько терминов в поле поиска.
В следующем примере суммируются значения из поля «Фрахт» для заказов, отправленных в Соединенное Королевство. Домен — это таблица заказов. Критерий Аргумент ограничивает результирующий набор записей теми, для которых ShipCountryRegion равно UK.
Dim curX As Currency
curX = DSum ("[Freight]", "Orders", _
"[ShipCountryRegion] = 'UK'")
В следующем примере общая сумма рассчитывается с использованием двух отдельных критериев.Обратите внимание, что в строковое выражение включены одинарные кавычки (‘) и числовые знаки (#), поэтому при конкатенации строк строковый литерал заключен в одинарные кавычки, а дата — в знаки фунта.
Dim curX As Currency
curX = DSum ("[Freight]", "Orders", _
"[ShipCountryRegion] = 'UK' AND _
[ShippedDate]> # 1-1-95 #")
ФункцияDSUM () — Искусство написания Критерии: 1 |
По мере того, как вы узнаете больше о MS Access, вы обнаружите, что функция DSUM () или, если на то пошло, любые другие агрегатные функции домена, такие как DAvg (), DCount () и т. Д.есть интересные приложения для анализа данных. Эти функции очень легко понять с точки зрения того, что они делают, но единственная запутывающая часть — это критерии функции. Я видел, как многие люди, в том числе и я, чувствовали себя немного неуютно и совершали глупые ошибки при построении критериев в этой функции.
Из этого поста вы узнаете, что именно делает функция DSUM () и, что более важно, как правильно построить критерии. Итак, приступим…
ФункцияDSUM (), как следует из названия, — это функция, которая помогает вам суммировать поле (т.е.е. столбец), указанный в конкретной таблице на основе определенных критериев, если это необходимо.
Функция следующая:
Как видно из вышеизложенного, есть два способа написать функцию DSUM ():
Создать функцию DSUM () без критериев
Создайте функцию DSUM () с критерием
Давайте рассмотрим каждый из двух способов работы с функцией DSUM ().
Чтобы понять, как ведет себя функция DSUM (), когда критерии не указаны, давайте быстро взглянем на следующий пример:
Допустим, вы хотите просуммировать значение поля [Количество] в таблице «Детали заказа», чтобы увидеть общее количество заказанных единиц.
Выполнив этот запрос, вы получите следующий результат:
Чтобы понять, как ведет себя функция DSUM () при задании критерия, давайте сначала проанализируем часть критериев функции DSUM ().
На приведенном выше снимке экрана вместо знака = можно также использовать другие операторы сравнения, такие как <,>, <= или> =.
Далее, есть три типа критериев, которые могут идти после этих операторов сравнения.Это:
- Текст
- Номер
- Дата
Помните: текст / число / дата может быть либо , указанным напрямую, , либо , указанным путем ссылки на столбец , содержащий требуемые значения текста / числа / даты. Это станет яснее, когда мы рассмотрим больше примеров ниже.
Давайте рассмотрим сценарий, в котором вы хотите определить общую стоимость доставки, уплаченную по всем городам, в которые вы отправляли свои товары.Для этого обратитесь к таблице «Заказы», в которой содержится вся соответствующая информация об отправленных заказах. Вам понадобятся следующие данные:
- Поле для суммирования: [Стоимость доставки]
- Таблица: Заказы
- Другие поля обязательны для заполнения: [Город корабля];
Вы ожидаете примерно такого же результата:
Город | Стоимость доставки Итого |
Город 1 | 450 |
Город 2 | 555 |
Город 3 | 687 |
Запрос будет построен следующим образом:
Как видно из скриншота выше:
Вы перетаскиваете поле [Город-корабль] в сетку запроса.
- Затем для начала просто укажите функцию DSUM () без критериев. Выполнив этот запрос, вы получите следующее. (Не забудьте нажать кнопку «Итоги»)
Общая сумма всего поля [Стоимость доставки] попадется в каждый из городов. НО, это не то, что вам нужно. Вы хотите, чтобы общая стоимость доставки была оплачена по КАЖДОМУ городу .
Итак, теперь вы вводите критерий в функции DSUM (), ссылаясь непосредственно на поле [Город доставки].Ссылаясь непосредственно на это поле, вы сообщаете DSUM, что, скажем, для города A суммируется стоимость доставки, соответствующая только этому городу A. Аналогичным образом сделайте то же самое для всех других городов, представленных в данных. (Обратите внимание, что поле [Город доставки], на которое вы ссылаетесь, содержит текстовые значения. Способ построения критериев зависит от типа данных, содержащихся в поле критериев)
Аргумент критерия записывается следующим образом:
( текст, выделенный красным, — это часть, в которой вы указываете критерии )
Это означает, что весь аргумент критерия будет передан механизму данных MS Access в виде строки.Поскольку значение критерия будет иметь тип текстовых данных , оно будет заключено в одинарные кавычки ‘’ следующим образом:
А теперь обратите внимание — вот и загадочная часть .
Прежде чем вы поймете, как создать критерий, ссылаясь непосредственно на поле, давайте посмотрим, как мы его конструируем, когда напрямую предоставляем текстовое значение.
- Укажите прямое значение :
Если значение критерия, которое вы собираетесь указать, является прямым текстом, например CityA, вы должны напрямую указать этот текст в одинарных кавычках как:
«Cfield = ‘CityA’»
Это будет означают, что DSUM будет выполнять добавление платы за доставку на месте для города «CityA» только .В нашем примере, если мы укажем город «Майами», то мы получим одинаковую сумму для всех городов следующим образом:
Укажите ссылку на поле :
Мы хотим, чтобы DSUM () вычисляла и отображала сумму, соответствующую соответствующим городам. Итак, мы будем ссылаться непосредственно на поле, как обсуждалось в начале пункта 3 ранее.
Само значение критерия будет текстом, поэтому нам потребуется строка внутри строки.Другими словами, строка критерия «Cfield = значение критерия» дополнительно будет включать другую строку. Эта другая строка будет объединена как
«& [Город корабля] &»
Итак, вы создадите следующий запрос:
При выполнении вышеуказанного запроса результат будет следующим:
Примечание. Для разных типов данных требуются разные разделители. Разделители сообщают Access, что следующим значением будет текстовое значение, значение даты или числовое значение.Итак, для текстового значения разделитель — это кавычки, для значения даты разделитель — #, тогда как для числового значения разделитель не требуется.
Вы могли заметить, что в построенном выше запросе был только один критерий — Город:
.Множественные критерии могут быть построены следующим образом:
При создании этого запроса в сетке запросов и после его выполнения вы получите следующий результат:
Таким образом, как описано выше, вы можете создать функцию DSUM, указав критерии в соответствии с вашими потребностями.
Ниже приводится краткое описание различных типов критериев:
Думаю, вы внимательно изучите и практикуете эту концепцию, прежде чем переходить к другим критериям (например, числу и дате). Пожалуйста, внимательно прочтите этот пост, попробуйте разные примеры и поделитесь интересными результатами / комментариями со всеми здесь.
В следующем посте вы научитесь создавать DSUM () с другими критериями, такими как число и текст.
Нравится:
Нравится Загрузка…
Связанные
Советы Microsoft Access: использование функции DSum
Сегодня мы рассмотрим использование функции DSum в вычисляемом элементе управления для получения общей суммы. Функция DSum работает аналогично функции DLookUp, о которой я писал в своем последнем посте. Обе функции передают идентичный набор параметров в своем синтаксисе. Однако вместо поиска значения поля в таблице или запросе функция DSum вычисляет сумму значений , содержащихся в конкретном поле указанной таблицы.Итак, давайте посмотрим на синтаксис функции DSum:
= DSum ("fieldName", "tableName", "условие")
Первый передаваемый параметр — это имя поля, содержащего группу значений, которые мы хотим сложить в виде суммы. Второй параметр — это имя таблицы или запроса, а третий параметр — это необязательный критерий, используемый для ограничения группы записей, по которым должны производиться вычисления. Все параметры передаются в виде строк — отсюда и кавычки.
Так, например, если бы у нас было поле с именем Amount и таблица с именем tblCategories , наше выражение выглядело бы так:
= DSum ("Amount", "tblCategories", "fldCategory = 'A '")
Последний параметр — строка критериев. В этом примере критерии ограничивают вычисление записями, содержащими значение «A» в поле fldCategory. Таким образом, эта функция будет генерировать общую сумму для всех записей, которым присвоено значение категории «A».
Итак, давайте применим все это на практике. На рисунке 1 ниже я создал таблицу tblCategories и заполнил ее значениями. Существует четыре различных категории A, B, C и D. Каждый экземпляр категории имеет связанное с ним значение суммы.
Рисунок 1: Таблица категорий ( табл. Категории ) |
Затем я создал форму с четырьмя вычисляемыми элементами управления. Я использовал функцию DSum в каждом элементе управления, чтобы вычислить общую сумму для каждой категории.
Рисунок 2: Функция DSum в элементах управления вычисляемой формы. |
И вот результаты:
Рисунок 2: Результаты функции DSum . |
Блог Роджера Access: Пример функции домена: Текущая сумма с DSum
До сих пор в этой серии, посвященной функциям предметной области, я обсуждал общий синтаксис (демистифицированные функции предметной области) и проблемы, связанные с построением выражений критериев (демистифицированные функции предметной области: выражения критериев).К сожалению, многие из приведенных мною примеров относительно тривиальны. Поэтому в следующих нескольких сообщениях в блоге я подумал, что приведу то, что считаю действительно полезными приложениями доменных функций.
Другие примеры
- Имитация AutoNumber с DMax
- Нумерованный запрос с DCount
- Разница между DMax
- Скользящее среднее с DAvg и DCount
- Дата начала и дата окончания с даты вступления в силу
Текущая сумма
Одна вещь, которую легко сделать в отчете, но сложно произвести в запросе, — это промежуточная сумма.Текущая сумма добавляет значение поля в записи к значению того же поля в предыдущей записи.В отчете есть два распространенных типа промежуточных сумм: Общая и Общая. Чтобы создать пробег по всем, я помещаю элемент управления в виде текстового поля в раздел сведений, устанавливая для свойства Control Source поле, которое я хочу суммировать, и устанавливая для свойства Running Sum значение Over, как показано на рисунке 1. На рисунке 2 показаны результаты. Чтобы создать один над группой (скажем, каждый номер заказа), я бы установил для свойства Текущая сумма значение Over Group
Рисунок 1
Рисунок 2
Но в запросе не все так просто.Проблема в том, что в SQL нет позиционной записи, как в Excel. Невозможно просто указать на запись над той, на которой вы сейчас. Единственный способ сделать это — как-то идентифицировать предыдущую запись с точки зрения условия Where. Поскольку это условие Where должно оцениваться для каждой строки, я могу сделать это с помощью агрегатной функции домена (DSum), что идеально.
Чтобы этот метод работал, у меня должен быть уникальный идентификатор записи. Поле Autonumber идеально подходит для этого. Неважно, есть ли в последовательности пропуски, но мне нужно отсортировать по этому полю, чтобы не было дубликатов, и они должны быть в том порядке, в котором мне нужно отображать.В приведенном выше примере OrderDetailsID отвечает всем требованиям.
Есть два разных способа увидеть текущую сумму:
- По всему списку (см. Рисунок 3)
- По каждой группе, где текущая сумма сбрасывается до нуля при изменении идентификатора заказа (см. Рисунок 5).
Существует два метода создания промежуточной суммы: агрегатная функция домена DSum и коррелированный подзапрос. Я собираюсь сосредоточиться здесь на методе DSum.
DSum
ВЫБРАТЬ OrderDetailID, OrderID, ProductID, Price,
DSum («Цена», «tblOrderDetails», «OrderDetailID <=" & [OrderDetailID]) AS RunningSum
FROM tblOrderDetails;
Функция DSum работает так же, как DCount в примере нумерованного запроса, но вместо подсчета записей она суммирует их. К сожалению, DSum не возвращает форматированное число.
Рисунок 3
Итак, если вы суммируете поле валюты, вам придется применить форматирование самостоятельно.Для этого мы можем изменить функцию DSum, добавив функцию Format для отображения числа в виде валюты. Примерно так:
Формат (DSum («Price», «tblOrderDetails», «OrderDetailID <=" & [OrderDetailID]), "Currency") AS RunningSumFormatted
Рисунок 4
Текущая сумма по группе
Для того, чтобы получить текущую сумму для каждой группы OrderID, все, что мне нужно сделать, это добавить еще одно условие к аргументу «Где» DSum:
DSum («Price», «tblOrderDetails», «OrderID =» & [OrderID] & «And OrderDetailID <=" & [OrderDetailID]) AS RunningSum
В данном случае «OrderID =» & [OrderID]
Полный оператор SQL (включая форматирование):
SELECT OrderDetailID, OrderID, ProductID, Price,
Формат (DSum («Цена», «tblOrderDetails», «OrderID =» & [OrderID] & «И OrderDetailID <=" & [OrderDetailID]), "Currency") AS RunningSum
FROM tblOrderDetails;
Рисунок 5
Метод подзапроса
Оба типа текущей суммы также могут выполняться с помощью коррелированных подзапросов.