Bootstrap

SQL Server中串联多行数据的同一个字段的内容

在使用SQL Server开发系统时候经常会遇到这么一种情况:
要把多行数据记录中的某个相同字段合并成一个字段,如下
表 table:
-------------
col1  col2
-------------
1         a
2         b
3         c
4         d


现在要把表中的col2字段中的数据合并成一个类似于‘a;b;c;d’这样的字段,该怎么做呢?


我们很自然可以想到先把每一条记录查出来,然后再进行拼装,但是,这样子做起来太麻烦了,
而且如果有很多的记录或者是记录数不定,那这种方法就基本上没用了,幸好,在SQL Server中,
一些自带的函数方法可以帮我们很好地做到这一点,而且十分简单,如下示:


stuff((select DISTINCT ';'+col2 from table for xml path('')),1,1,'')


这样子就可以得到我们想要的结果‘a;b;c;d’


在这里 for xml path('')的作用是把多行数据内容串联起来成为一个数据,SQL Server 2005以后的版本支持
通过这个方法就可以得到数据‘;a;b;c;d’,但这样子得到的数据前面就多了一个分号了,不要紧,使用stuff函数就可以把数据最前面的分号给去掉,得到最终的结果了。

悦读

道可道,非常道;名可名,非常名。 无名,天地之始,有名,万物之母。 故常无欲,以观其妙,常有欲,以观其徼。 此两者,同出而异名,同谓之玄,玄之又玄,众妙之门。

;