怎样在access中实现分组(group by)后文本合并
第一步、在“创建”——“宏与代码”——“模块”中定义函数:
Public Function GroupConcat(sColumn As String, sTable As String, Optional sCriteria As String, Optional sDelimiter As String = “,”)
On Error GoTo ErrHandler
Dim rs As New ADODB.Recordset
Dim sSQL As String
Dim sResult As String
sResult = “”
sSQL = "select " & sColumn & " from " & sTable
If sCriteria <> “” Then
sSQL = sSQL & " where " & sCriteria
End If
rs.Open sSQL, CurrentProject.Connection, adOpenForwardOnly, adLockReadOnly
Do While Not rs.EOF
If sResult <> “” Then
sResult = sResult & sDelimiter
End If
sResult = sResult & rs.Fields(0).Value
rs.MoveNext
Loop
rs.Close
Set rs = Nothing
GroupConcat = sResult
Exit Function
ErrHandler:
If rs.State <> adStateClosed Then
rs.Close
End If
Set rs = Nothing
GroupConcat = Err.Number & " : " & Err.Description
End Function
第二步:定义表T_Person_Course并插入数据(示例):
编号 Name Course
1 张乐 语文
2 张乐 数学
3 张乐 英语
4 张乐 历史
5 朴正南 韩语
6 朴正南 汉语
7 欧阳南 计算机
8 欧阳南 农牧
9 欧阳南 音乐
第三步:新建表“1”,字段Course数据格式设置成“备注”,防止字符数超过8000被自动截断。
第四步:执行追加查询:
SELECT T_Person_Course.Name, GroupConcat(‘Course’,‘T_Person_Course’,‘Name=’ & “’” & Name & “’”) AS Courses INTO 1
FROM T_Person_Course
GROUP BY T_Person_Course.Name;
执行后结果:
Name Courses
欧阳南 计算机,农牧,音乐
朴正南 韩语,汉语
张乐 语文,数学,英语,历史
第五步:遇到access编译错误:用户定义类型未定义时,进入窗体设计状态→代码区(或者按Alt+F11键进入)→工具→引用→勾选Microsoft DAO 3.6 Objsct Library即可
如下图:
同理如果出现ADODB未定义,如下图:
也可按照上述方法,从引用里面找到并勾选ADO引用即可.(请优先勾选如下图2.1版本的选项,不行的情况下在勾选2.8版本)