SQL如何行转列合并字符串并用逗号隔开?
1、打开微软SSMS数据库工具,登录后新建一个查询窗口。

2、先准备一些示例数据,新建一个表用于存储三国武将的阵营信息。执行以下语句:
CREATE TABLE WJZY
(
WName VARCHAR(30), --姓名
Camp VARCHAR(30) --阵营
);

3、接着为WJZY表插入一些武将及所属阵营的数据,执行以下语句插入:
INSERT INTO WJZY VALUES('孙乾','蜀');
INSERT INTO WJZY VALUES('庞统','蜀');
INSERT INTO WJZY VALUES('黄盖','吴');
INSERT INTO WJZY VALUES('曹仁','魏');
INSERT INTO WJZY VALUES('陆逊','吴');
INSERT INTO WJZY VALUES('张辽','魏');
INSERT INTO WJZY VALUES('于禁','魏');
INSERT INTO WJZY VALUES('赵云','蜀');
INSERT INTO WJZY VALUES('甘宁','吴');

4、然后可以执行 select * from WJZY 语句查询下刚才插入的数据,可以看到是每名武将一行的数据,下面要将其按所属阵营来合并。

5、合并使用的是 FOR XML PATH 方法,执行select * from WJZY FOR XML PATH('') 可以看到使用该方法后会把所有的数据都以XML的方式合并到一行去了。

6、最后想办法将数据按阵营来合并数据即可,使用distinct方法区分阵营并用子查询的方式查询武将的姓名,执行以下语句可以看到武将姓名字符按阵营合并到一行了并用逗号隔开。
select distinct camp as 阵营,
(select wname+',' from WJZY a
where a.camp=WJZY.camp FOR XML PATH('')) as 姓名
from WJZY
