如何在 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 邮箱移动到另一个邮箱

如何在 BigQuery SQL 中将字符串列拆分为多行单个单词和单词对?

在 ms access 2010 中将查询结果插入表中