在 Access 中连接记录和 GROUP BY

Posted

技术标签:

【中文标题】在 Access 中连接记录和 GROUP BY【英文标题】:Concatenate records and GROUP BY in Access 【发布时间】:2013-03-15 12:38:37 【问题描述】:

我有一张这样的桌子:

title               part                   desc
Blah This           1                      This begins the
Blah This           2                      example table.
Some Record         1                      Hello
Another             1                      This text extends a bit
Another             2                      further so it is in
Another             3                      another record in the
Another             4                      table

在 Access 中,我希望为 GROUP BY title 构建一个查询/SQL,并连接 desc 字段,使其看起来像这样:

title              desc
Blah This          This begins the example table.
Some Record        Hello
Another            This text extends a bit further so it is in another record in the table

如何仅使用 SQL(无 VBA/脚本)来完成? FOR XML PATH 似乎在 Access 中不起作用,只能在 SQL Server 中使用。我在这里How to improve efficiency of this query & VBA? 尝试过 VBA,但速度太慢了。

或者是否有一个可以在查询已经打开时不连续运行的函数?

【问题讨论】:

看看这个。不确定 FOR XML PATH 是否适用于 Access,但如果可以,这就是您的答案:***.com/questions/14082863/… 仅使用 Access 中的 Sql 是无法做到这一点的。 You'll need to use a function. 【参考方案1】:

以下是如何使用 VBA 解决此问题的粗略概述;它通过对详细记录运行单个数据库查询来执行更快:

Set rsParent = CodeDb.OpenRecordset("SELECT * FROM MainTable ORDER BY HeaderID")
Set rsDetail = CodeDb.OpenRecordset("SELECT * FROM DetailTable ORDER BY HeaderID")
Do Until rsParent.EOF
  ...
  myString = rsParent!MainHeaderName & AggregateDetails(rsDetail, rsParent!HeaderID)
  rsParent.MoveNext
Loop
...

Function AggregateDetails(rsDetail as Recordset, HeaderID as String) as String
   Dim DetailString as String

   Do While rsDetail!HeaderID = HeaderID
      DetailString = DetailString & ", " & rsDetail!DetailName
      rsDetail.MoveNext
      If rsDetail.EOF Then Exit Do
   Loop
   AggregateDetails = DetailString
End Function

【讨论】:

【参考方案2】:

Access :/ 中没有 Group_Concat。可能没有排除 VBA 的解决方案。 这是一种可能:Concatenating Rows through a query

【讨论】:

以上是关于在 Access 中连接记录和 GROUP BY的主要内容,如果未能解决你的问题,请参考以下文章

PDO 不能在 Access 数据库中插入新记录,但可以在同一个连接中读取和删除

如何连接具有不同 GROUP BY 级别的两个查询,使一些记录为空

MS Access ADP 断开连接的记录集恢复

用asp如何实现下拉列表值筛选access数据库记录

SQL - 使用 GROUP BY 获取子查询子集中或连接中的最新记录

MS Access DAO 连接在退出时放弃更改