日期:2014-05-17  浏览次数:20607 次

一个转换的问题,急!!!!!!!!!!!!!!

CREATE TABLE T(
id INT IDENTITY(1,1),
name VARCHAR(50)
)
INSERT INTO T(name)
SELECT '张三' union
SELECT '李四' union
SELECT '王五'
SELECT * FROM t
/*
得到的结果
id  name
1 李四
2 王五
3 张三
*/
/*
想要的结果
id     name
1,2,3  李四,王五,张三
*/
求高人帮解,不胜感激

------最佳解决方案--------------------
--CREATE TABLE R
--(
--    id INT ,
--    RelationId INT,--对应T表中的id
--)
--INSERT INTO R(id,RelationId)
--SELECT 1,2 UNION
--SELECT 1,3 UNION
--SELECT 2,1 UNION
--SELECT 2,3 UNION
--SELECT 3,1 UNION
--SELECT 3,2

--CREATE TABLE T(
--id INT IDENTITY(1,1),
--name VARCHAR(50)
--)
--INSERT INTO T(name)
--SELECT '张三' union
--SELECT '李四' union
--SELECT '王五'
--SELECT * FROM t



;WITH test AS 
(
SELECT r.id,RelationId,t.name
FROM t INNER JOIN r ON t.id=r.RelationId
)

--SELECT * FROM test


select a.id,
stuff((select ','+CONVERT(VARCHAR(10),RelationId) from test b 
       where b.id=a.id 
       for xml path('')),1,1,'') 'RelationId',
       stuff((select ','+CONVERT(VARCHAR(10),name) from test b 
       where b.id=a.id 
       for xml path('')),1,1,'') 'name'
from test a
group by  a.id
/*
id          RelationId                                                                                                                                                                                                                                                       name
----------- ---------------------------------------------------------------------------------------------------------------- ----------------------------