sql server 中某个字段值合并【转】

一、问题

有表如下:

如何获得如下结果:

二、解法一

使用xml转换

代码如下:

01 CREATE TABLE body
02 (
03     ID int,
04     BODY nvarchar(20)   
05 )
06 go
07 INSERT INTO body VALUES(1,'aaaa')
08 INSERT INTO body VALUES(2,'bbbb')
09 INSERT INTO body VALUES(1,'cccccc')
10 INSERT INTO body VALUES(3,'ddddd')
11 go
12 SELECT * FROM body
13   
14 SELECT distinct a.ID,stuff((SELECT ','+BODY FROM body WHERE ID=a.ID FOR xml path('')),1,1,'') ASBODY
15 FROM
16 body a
17   
18   
19 --具体思路是这样的:
20 SELECT ','+BODY FROM body WHERE ID=a.ID FOR xml path('')
21 --这条语句的作用是按照a中的ID查找body表中ID=a.ID的所有记录,并把它转换成一个xml(关于将查询集转换成xml的文章,
22 --博客园有很多的,你可以去看看)
23 stuff((SELECT ','+BODY FROM body WHERE ID=a.ID FOR xml path('')),1,1,'')
24 --这条语句的作用是把生成的xml前面的一个逗号去掉并转化成标量值
25 --最后用一个distinct去掉重复的记录

posted on 2013-03-29 09:47  不死小强  阅读(226)  评论(0编辑  收藏  举报

导航