SQL查询优化:将用户多行任务ID合并为单行展示
优化SQL实现用户任务ID合并展示
你需要将同一用户的多个任务ID合并到单行展示,原查询因分组条件包含tid导致同一用户生成多条记录,同时拼接的分隔符和开头冗余问题也需要调整,以下是优化后的SQL:
SELECT w.[user] AS Username, STUFF((SELECT ', ' + d.taskid FROM tasks d WHERE d.guid = w.guid FOR XML PATH('')), 1, 2, '') AS TaskId FROM taskuser w WHERE w.type = 'pm0' GROUP BY w.[user], w.guid
关键优化点:
- 调整分组条件:原查询
GROUP BY w.user, w.tid会按用户+任务ID分组,导致同一用户出现多条记录,改为按w.[user], w.guid分组(确保每个用户对应唯一的关联标识guid),保证每行对应一个用户 - 处理冗余分隔符:使用
STUFF函数去掉子查询拼接后字符串开头的,,避免结果出现多余的前置分隔符 - 匹配期望格式:将分隔符从
;改为,,与你期望的输出格式一致
执行上述SQL后,将得到如下结果:
| Username | TaskId |
|---|---|
| Frane | PM0-10003 |
| Jordan | PM0-10004, PM0-10005, PM0-10006 |
内容的提问来源于stack exchange,提问作者Funkie Cat
相关产品推荐
相关产品推荐

