SQL Server 2008:子查询分组拼接pastduereccount字段问题
解决SQL中相同ID行的HTML内容拼接问题
我来帮你搞定这个SQL拼接的问题!你现在遇到的情况是相同lastinspectionid的两行数据,想要把对应的pastduereccount(HTML内容)合并成一行,之前用STUFF+FOR XML PATH的方法没成功,大概率是两个核心问题:要么子查询没关联主表的ID,要么HTML里的特殊字符被XML自动转义了。下面给你两种针对性的解决方案:
方案1:保留原始HTML格式(推荐)
如果你的pastduereccount是HTML内容,想要保留<、>、&这些字符不被转义成实体编码(比如<),一定要用TYPE参数配合.value()方法:
SELECT lastinspectionid, PastDueRecCount2 = STUFF( ( -- 子查询必须关联主表的lastinspectionid,只拼接同ID的内容 SELECT ' ' + PastDueRecCount FROM YourTableName t2 WHERE t2.lastinspectionid = t1.lastinspectionid FOR XML PATH(''), TYPE ).value('.', 'NVARCHAR(MAX)'), -- 把XML类型转换成原始字符串 1, 1, '' -- 去掉开头多余的空格 ) FROM YourTableName t1 GROUP BY lastinspectionid;
方案2:普通字符串拼接
如果你的内容不需要保留HTML特殊字符,或者字符都是安全的,可以用简化版的写法,但同样要保证子查询和主表的ID关联:
SELECT lastinspectionid, PastDueRecCount2 = STUFF( ( SELECT ' ' + PastDueRecCount FROM YourTableName t2 WHERE t2.lastinspectionid = t1.lastinspectionid FOR XML PATH('') ), 1, 1, '' ) FROM YourTableName t1 GROUP BY lastinspectionid;
注意事项
- 记得把代码里的
YourTableName替换成你实际使用的表名 - 如果需要调整拼接的分隔符(比如HTML里换行用
<br>),直接把' '换成你想要的分隔符即可
内容的提问来源于stack exchange,提问作者nerdperson
相关产品推荐
相关产品推荐

