学而实习之 不亦乐乎

Sql Server数据合并:将多条数据合并到一条记录中

2019-01-20 11:30:06

问题:如何将数据表中同一个人的课程,综合到一行数据中去。
数据表情况如下图所示
 
综合之后,每个人只有一行数据,
如:王五    数学,物理,化学,生物,政治

方法:
SELECT name,stuff(
    (SELECT ','+[class] FROM dbo.tb_0002 AS tb01 where tb01.name=tb02.name FOR xml PATH(''))
    ,1,1,'') AS classes 
 FROM  dbo.tb_0002 AS tb02 
 GROUP BY name

结果如下图:

SQL 语句解析:
1.    STUFF():STUFF 函数将字符串插入到另一个字符串中。 它从第一个字符串的开始位置删除指定长度的字符;然后将第二个字符串插入到第一个字符串的开始位置。这里的作用是去掉字段classes前面的‘,’。
2.    FOR XML PATH(‘’):这个语句,这个问题的解决主要是这个函数(有兴趣的话,可以自己执行一下)。这名主要是把查到的数据变成XML格式(由多行到一行),之后以没有XML标签,那是因为PATH(’’)没有指定,而是用空字符。