一、问题
有表如下:
如何获得如下结果:
二、解法一
使用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, '' ) AS BODY |
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去掉重复的记录 |