Access按姓名日期group by分组后如何拼接同组任务到同一单元格
Access分组拼接同组多行文本实现方法
Access原生没有直接支持多行字符串拼接的聚合函数,直接用&运算符配合GROUP BY无法实现跨同行拼接,以下是两种可落地的方案:
方案一:全版本通用VBA方案(兼容性最好,推荐)
- 打开数据库后按
Alt+F11唤起VBA编辑器,在左侧工程面板右键点击当前数据库,选择【插入】-【模块】 - 在模块代码编辑区粘贴如下自定义函数代码,注意替换代码注释中标注的表名、字段名为你实际库中的命名:
Function GroupConcat(sEmpName As String, dWorkDate As Date) As String Dim rs As DAO.Recordset Dim querySql As String Dim resultStr As String ' 请将下方SQL中的「任务表」「员工姓名」「日期」「任务内容」替换为你实际的表名、字段名 querySql = "SELECT 任务内容 FROM 任务表 WHERE 员工姓名='" & Replace(sEmpName, "'", "''") & "' AND 日期=#" & Format(dWorkDate, "yyyy-mm-dd") & "#" Set rs = CurrentDb.OpenRecordset(querySql) resultStr = "" Do While Not rs.EOF If resultStr <> "" Then resultStr = resultStr & ";" ' 分隔符可按需修改,换行可用Chr(13)&Chr(10) resultStr = resultStr & Nz(rs!任务内容, "") rs.MoveNext Loop rs.Close Set rs = Nothing GroupConcat = resultStr End Function
- 保存模块后回到Access查询界面,新建查询切换到SQL视图,运行如下语句即可得到结果:
SELECT 员工姓名, 日期, GroupConcat(员工姓名, 日期) AS 当日合并任务 FROM 任务表 GROUP BY 员工姓名, 日期;
方案二:高版本Access无代码方案(仅Access 365/2021及以上版本支持)
如果你的Access版本较新,内置了TEXTJOIN聚合函数,可以直接写查询实现,无需写VBA:
SELECT 员工姓名, 日期, TEXTJOIN(";", TRUE, 任务内容) AS 当日合并任务 FROM 任务表 GROUP BY 员工姓名, 日期;
注意:低版本Access没有
TEXTJOIN函数,运行该语句会报函数不存在错误,优先使用VBA方案。
示例数据效果参考:
内容的提问来源于stack exchange,提问作者AUinIS
相关产品推荐
相关产品推荐

