【问题标题】:Aggregating table via a loop通过循环聚合表
【发布时间】:2018-01-09 11:16:08
【问题描述】:

我有一个包含多个货件的数据表 - 表名“2 - Rates 0 Pre-Setup”。 数据示例。

Country     POL            Volume
India       Mumbai         90
India       Mumbai         9
India       Nhava Sheva    3
India       Nhava Sheva    474
India       Tuticorin      19
India       Tuticorin      1352
Indonesia   Jakarta        1020
Indonesia   Jakarta        67

我需要根据体积字段将这些数据聚合到一个新表中,以便为用户生成一个模板,如下所示。

Country     POL            Volume
India       Mumbai         99
India       Nhava Sheva    477
India       Tuticorin      1371
Indonesia   Jakarta        1087

下面的代码可以很好地复制原始表并生成新的“测试 1”表,但我很难根据 Volume 字段聚合数据。 假定 sum(lane!Volume) 但它出错了。

Private Sub NewOceanFreight_Click()
Dim db As DAO.Database
Dim lane As DAO.Recordset
Set db = CurrentDb

Set lane = db.OpenRecordset("2 - Rates 0 Pre-Setup")
Set Test1 = db.OpenRecordset("Test 1")

DoCmd.SetWarnings False
DoCmd.RunSQL "DELETE * FROM [Test 1]"

    Do Until lane.EOF
        lane1 = lane![Country]
        lane2 = lane!POL
        lane3 = lane!Volume

        Test1.AddNew
        Test1![Origin Country] = lane1
        Test1![Origin Port] = lane2
        Test1![CBM] = lane3
        Test1.Update
    lane.MoveNext
    Loop
    lane.Close
    DoCmd.Requery
    End Sub

抱歉,如果这是重复但对 Access 中的 VBA 是新手,并且无法从其他帖子中找到对我有用的答案,因此欢迎提供任何建议。谢谢。

【问题讨论】:

    标签: vba loops ms-access aggregate-functions


    【解决方案1】:

    只需对原始表运行聚合查询,如果需要,使用make-table query 将结果导出到新表。这里不需要 VBA。一切都可以在 SQL 查询设计中完成。

    SELECT t.Country, t.POL, SUM(Volume) AS Total_Volume
    FROM [2 - Rates 0 Pre-Setup] t
    GROUP BY t.Country, t.POL
    

    通过使用INTO 子句的生成表操作查询

    SELECT t.Country, t.POL, SUM(Volume) AS Total_Volume
    INTO myNewTable
    FROM [2 - Rates 0 Pre-Setup] t
    GROUP BY t.Country, t.POL
    

    【讨论】:

    • 希望使用 VBA,因为有大量类似的查询,我想删除这些查询以减小文件大小,以免有临时表。不过,我会同时使用你的建议。谢谢。
    • 您可以使用 VBA 自动执行这些生成表 SQL 查询。只需遍历 tabledefs 或 querydefs 并对聚合查询执行生成表操作:CurrentDb.Execute "SELECT * INTO mynewTable FROM myaggquery"
    • 很棒,构建起来更简单。非常感谢。
    猜你喜欢
    • 2019-07-20
    • 2021-08-20
    • 2014-09-19
    • 1970-01-01
    • 1970-01-01
    • 2017-05-17
    • 2015-09-05
    • 1970-01-01
    • 2015-04-06
    相关资源
    最近更新 更多