SQL多表行合并:将关联列值合并为CSV格式的问题求助
解决SQL合并ParentObjectType为CSV的问题
问题原因
你得到所有行结果相同的问题,根源是子查询没有添加与外层表的关联条件,导致子查询直接合并了Table2里所有的ParentObjectType,没有和Table1的当前行做匹配。
修正后的查询语句(SQL Server)
SELECT t1.ObjectName, STUFF( (SELECT ',' + t2.ParentObjectType FROM Table2 t2 WHERE t2.ChildObjectType = t1.ObjectName -- 关键关联条件,确保只匹配当前ObjectName FOR XML PATH(''), TYPE).value('.', 'NVARCHAR(MAX)'), 1, 1, '' ) AS ParentObjectTypes FROM Table1 t1 WHERE t1.Status = 'Active';
封装为存储过程
CREATE PROCEDURE GetParentObjectTypes AS BEGIN SET NOCOUNT ON; SELECT t1.ObjectName, STUFF( (SELECT ',' + t2.ParentObjectType FROM Table2 t2 WHERE t2.ChildObjectType = t1.ObjectName FOR XML PATH(''), TYPE).value('.', 'NVARCHAR(MAX)'), 1, 1, '' ) AS ParentObjectTypes FROM Table1 t1 WHERE t1.Status = 'Active'; END;
关键说明
WHERE t2.ChildObjectType = t1.ObjectName是核心:它让子查询只筛选出与当前行ObjectName对应的ParentObjectType,避免全局合并。FOR XML PATH(''), TYPE配合.value():既实现字符串拼接,又能避免特殊字符被转义(比如&会被转成&的问题)。STUFF(...,1,1,''):去掉拼接后字符串开头多余的逗号。
内容的提问来源于stack exchange,提问作者Abhid
相关产品推荐
相关产品推荐

