如何在Microsoft Access中按StudentID和Subject合并重复行
在Access中按StudentID和Subject合并重复行并聚合Code字段
方法:自定义VBA函数+查询实现
Access本身没有内置的字符串聚合函数,我们可以通过自定义VBA函数来实现Code字段的合并,步骤如下:
- 创建VBA聚合函数
按Alt+F11打开VBA编辑器,右键点击数据库对象→插入→模块,粘贴以下代码:
Function ConcatenateCodes(strStudentID As String, strSubject As String) As String Dim rs As DAO.Recordset Dim strCodes As String Dim strSQL As String ' 构造SQL查询,筛选当前StudentID和Subject的唯一Code strSQL = "SELECT DISTINCT Code FROM 你的表名 WHERE StudentID = '" & strStudentID & "' AND Subject = '" & strSubject & "'" Set rs = CurrentDb.OpenRecordset(strSQL) ' 遍历记录集,拼接Code为[Code];[Code]格式 Do While Not rs.EOF If strCodes <> "" Then strCodes = strCodes & ";[" & rs!Code & "]" Else strCodes = "[" & rs!Code & "]" End If rs.MoveNext Loop ConcatenateCodes = strCodes rs.Close Set rs = Nothing End Function
注意:把代码里的你的表名替换成你实际的表名称;如果StudentID是数字类型,去掉代码里的单引号。
- 创建合并查询
创建一个新的查询,切换到SQL视图,粘贴以下SQL语句:
SELECT StudentID, Subject, ConcatenateCodes(StudentID, Subject) AS 合并后的Code FROM 你的表名 GROUP BY StudentID, Subject;
运行这个查询,就能得到按StudentID和Subject去重,且Code字段合并为指定格式的结果。
示例效果
对于原表中两行StudentID为393438、Subject为Math的记录,查询结果会显示为一行,合并后的Code字段值为[AF15];[DS1.4]。
内容的提问来源于stack exchange,提问作者Charles Hanson
相关产品推荐
相关产品推荐

