如何在 Access 2010 中将单个字段的所有记录相乘
Posted
技术标签:
【中文标题】如何在 Access 2010 中将单个字段的所有记录相乘【英文标题】:How to multiply all records of a single field in Access 2010 【发布时间】:2013-10-28 07:03:33 【问题描述】:我想将 Access 2010 中单个字段的所有记录相乘。
我试过mult(Field name)
和product(field name)
无济于事。
任何人都可以帮助我 Access 中有什么功能可以这样做吗?
示例: 我有一个包含字段 S1 的表
S1
---
557
560
563
566
569
572
575
578
581
并且输出应该在另一个具有字段结果的表中
Result
--------
6.25E+24
【问题讨论】:
一些示例数据会有所帮助。 因为我有一个包含字段 S1 的表,并且我想将该列的所有值 Mutilple S1 S1 557 560 563 566 569 572 575 578 581 请在您的问题中添加该内容和格式化的预期输出。 并且输出应该在另一个表中,字段结果为 Result 6.25E+24 正如我所说,请将所有内容直接添加到您的问题中。并使用
按钮格式化您的代码。
【参考方案1】:
不幸的是,Access SQL 中没有 PRODUCT()
函数可以让您这样做
SELECT PRODUCT([S1]) AS Result FROM [YourTable]
但是,您可以使用 VBA “滚动自己”DProduct()
域聚合函数,类似于内置的 DSum()
函数:
Option Compare Database
Option Explicit
Public Function DProduct(Expr As String, Domain As String, Optional criteria) As Variant
Dim SQL As String, Result As Double
Dim cdb As DAO.Database, rst As DAO.Recordset
On Error GoTo DProduct_Error
Set cdb = CurrentDb
SQL = "SELECT " & Expr & " AS Expr1 FROM [" & Domain & "]"
If Not IsMissing(criteria) Then
SQL = SQL & " WHERE " & criteria
End If
Set rst = cdb.OpenRecordset(SQL, dbOpenSnapshot)
If rst.BOF And rst.EOF Then
DProduct = Null
Else
Result = 1
Do Until rst.EOF
Result = Result * rst!Expr1
rst.MoveNext
Loop
DProduct = Result
End If
rst.Close
Set rst = Nothing
Set cdb = Nothing
Exit Function
DProduct_Error:
DProduct = Null
End Function
使用问题中的示例数据进行测试
?DProduct("S1", "YourTable")
6.24666417941851E+24
【讨论】:
以上是关于如何在 Access 2010 中将单个字段的所有记录相乘的主要内容,如果未能解决你的问题,请参考以下文章
如何在 MS Access 2010 中将 ACCDB 转换为 MDB
如何在拆分数据库中将表从前端链接到后端(MS Access 2010)
如何计算 Access 2010 表中所有列中的所有 NULL 值?
如何在 MS Access 中将邮件从一个链接的 Exchange 邮箱移动到另一个邮箱