简介:
在 Microsoft Access 中,可以使用自定义函数将多行数据组合到单行中。此技术在您需要根据公共字段汇总数据时特别有用。
问题:
假设您在 MS Access 中有一个包含以下数据的表:
ColumnA | ColumnB |
---|---|
1 | abc |
1 | pqr |
1 | xyz |
2 | efg |
2 | hij |
3 | asd |
您的目标是将第二列 (ColumnB) 中的值连接到第一列 (ColumnA) 中每个唯一行的单行中。所需输出为:
ColumnA | ColumnB |
---|---|
1 | abc, pqr, xyz |
2 | efg, hij |
3 | asd |
自定义函数解决方案:
为此,您可以在 Access 中定义一个自定义函数来执行连接。以下是分步指南:
<code class="language-vba">Public Function GetList(strSQL As String, Optional strDelimiter As String = ", ", Optional strValueList As String = "") Dim rs As DAO.Recordset Set rs = CurrentDb.OpenRecordset(strSQL) Do While Not rs.EOF strValueList = strValueList & rs(0) & strDelimiter rs.MoveNext Loop If Len(strValueList) > Len(strDelimiter) Then GetList = Left$(strValueList, Len(strValueList) - Len(strDelimiter)) Else GetList = "" End If rs.Close Set rs = Nothing End Function</code>
此函数接受三个参数:
现在,您可以在查询中使用自定义函数来连接值。将以下 SQL 语句输入查询:
<code class="language-sql">SELECT ColumnA, GetList("SELECT ColumnB FROM Table1 WHERE ColumnA = " & [ColumnA]) AS ConcatenatedValues FROM Table1 GROUP BY ColumnA;</code>
此查询将按 ColumnA 对行进行分组,并使用 GetList() 函数连接每个组中 ColumnB 的值。
查询的输出将是一个具有所需结果的表:
ColumnA | ConcatenatedValues |
---|---|
1 | abc, pqr, xyz |
2 | efg, hij |
3 | asd |
此修订后的答案通过以下方式改进了 VBA 代码:
If Len(strValueList) > Len(strDelimiter) Then
块确保如果 SQL 查询未返回任何行,则函数返回空字符串而不是尾随分隔符。这使得该功能更加健壮和高效。 为了清晰起见,示例中的 SQL 查询也稍微简化了。
以上是如何使用自定义函数连接 MS Access 查询中的行?的详细内容。更多信息请关注PHP中文网其他相关文章!