Ms access MS Access根据现有表的ID向其添加/更新查询结果

Ms access MS Access根据现有表的ID向其添加/更新查询结果,ms-access,sql-update,ms-query,Ms Access,Sql Update,Ms Query,我按照其他人的提示生成访问查询 我有两张桌子。参见图1。结果如图2所示 图1 图2 中解决了生成结果查询的方法 查询脚本: 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

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

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

图1

图2

中解决了生成结果查询的方法

查询脚本:

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”向字段添加或更新查询值


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

你不能直接做这件事。然而,这里有两种间接的方法

方法1:临时表格

这种方法最适用于快速且不干净的一次性解决方案

  • 基于查询创建生成表查询,并使用它生成临时表
  • 使用连接到[表1]的临时表更新两个新字段
  • 删除临时表
  • 方法2:VBA例程

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

  • 将查询读入记录集中
  • 循环遍历记录集,并针对每个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
    

    你好,谢谢你的回复。我不熟悉VBA。如果我想尝试方法2,我需要单击“visual basic”按钮?并将脚本插入其中?但我不知道怎么触发它@@我想混合方法1和方法2。当我运行查询时,它将创建一个临时表。(我的临时表现在只有同一年的数据,例如:所有数据都将是2000)您是否可以教我如何使用一个表并根据其ID更新另一个表的字段?谢谢你>