2

我按照其他人的提示生成了访问查询。

我有两张桌子。见图1。结果如图2。

图1 http://img.libk.info/f1.png http://img.libk.info/f1.png

图2 http://img.libk.info/f2.png http://img.libk.info/f2.png

生成结果查询的方法在另一个问题中解决。

查询脚本:

TRANSFORM Nz(Count([number]),0) AS CountValue
SELECT Table1.ID
FROM Table1, Table2
WHERE (((Table2.number) Between [table1].[start] And [table1].[end]))
GROUP BY Table1.ID
PIVOT DatePart("yyyy",[ndate]);

我的问题是:

无论如何将查询结果写回表1?

我想在表 1 中添加两个新列。并且能够根据其“ID”向字段添加或更新查询值。

我不确定我的描述是否清楚。希望您能理解并感谢您的帮助!

4

1 回答 1

0

您将无法直接执行此操作。但是,这里有两种方法可以间接完成。

方法一:临时表

这种方法最适合快速而肮脏的一次性解决方案。

  1. 根据您的查询创建一个 Make-Table 查询,并使用它来制作一个临时表。
  2. 使用连接到 [Table 1] 的临时表来更新您的两个新字段。
  3. 删除临时表

方法 2:VBA 例程

当您需要可重复的方法时,此方法是最佳选择。如果你只打算做一次,那就太过分了。但是,如果您想要计算每年的值,则需要再次运行它。

  1. 将查询读入记录集
  2. 循环遍历 Recordset 和每个 ID,或者
    • 运行 sql 语句更新表 1,或
    • 通过 ID 和编辑/更新打开第二个记录集查询

这是一个简单的版本,可以更新一年的值。

Public Sub UpdateAnnualTotal(ByVal nYear As Long)
    Dim db As DAO.Database
    Dim rs As DAO.Recordset
    Dim sSQL As String
    Dim sId As String
    Dim nTotal As Long

    Set db = CurrentDb

    sSQL = "SELECT [ID],[" & nYear & "_count"] FROM AnnualTotalsQuery"
    Set rs = db.OpenRecordset(sSQL)
    With rs
        Do Until .EOF

            sId = .Fields("ID").Value
            nTotal = .Fields(nYear & "_count").Value

            sSQL = "UPDATE [Table 1] SET [" & nYear & "_count"] = " & nTotal  _
                & " WHERE [ID] = '" & sId & "'"

            db.Execute sSQL

            .MoveNext
        Loop

        .Close

    End With

End Sub
于 2015-08-01T21:47:14.510 回答