SQL按动态LoadID分组合并Comment:移除WHERE条件实现批量分组
按LoadID分组合并评论的SQL解决方案
嘿,这事儿好办!我帮你修改下SQL语句,实现按所有LoadID自动分组合并评论的效果——不用再固定指定LoadID值,自动把同一ID下的评论拼成逗号分隔的字符串。
先回顾下你的原始数据表TB_SOT_Comment:
| LoadID | coment |
|---|---|
| 1234 | comment1 |
| 1234 | comment2 |
| 1234 | comment3 |
| 12345 | comment4 |
| 28366356 | comment5 |
| 28366356 | comment6 |
| 1212 | comment7 |
你原来的SQL只能针对单个固定LoadID合并:
SELECT coment + ',' AS 'data()' FROM TB_SOT_Comment Where LoadID = '1234' FOR XML PATH('')
现在要实现全LoadID自动分组,我们可以结合GROUP BY和STUFF函数去掉最后多余的逗号,最终SQL如下:
SELECT LoadID, STUFF( (SELECT ',' + coment FROM TB_SOT_Comment t2 WHERE t2.LoadID = t1.LoadID FOR XML PATH('')), 1, 1, '' ) AS coment FROM TB_SOT_Comment t1 GROUP BY LoadID
语句逻辑简单说下:
- 外层用
GROUP BY LoadID按ID分组,保证每个LoadID只输出一行 - 内层子查询通过
FOR XML PATH('')把同一ID下的评论拼接成,comment1,comment2,comment3格式的字符串 STUFF函数会删掉开头的多余逗号,最终得到干净的comment1,comment2,comment3结果
执行后就能得到你想要的输出:
| LoadID | coment |
|---|---|
| 1234 | comment1,comment2,comment3 |
| 12345 | comment4 |
| 28366356 | comment5,comment6 |
| 1212 | comment7 |
内容的提问来源于stack exchange,提问作者Mobeen Tahir Latif
相关产品推荐
相关产品推荐

