通过循环聚合表

时间:2018-01-09 11:16:09

标签: vba loops ms-access aggregate-functions

我有一个包含多个货件的数据表 - 表名称“2 - Rate 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

我需要将基于volume字段的数据聚合到一个新表中,为用户生成一个模板,如下所示。

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

下面的代码可以正常复制原始表并生成新的“Test 1”表,但我很难根据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

道歉,如果这是重复但是对于VBA在Access中是新手,并且找不到其他帖子对我有用的答案,所以欢迎任何建议。感谢。

1 个答案:

答案 0 :(得分: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子句

进行make-table操作查询
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