在 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 级别的两个查询,使一些记录为空