如何在SQL Server 2005中的单行中以逗号分隔显示多个行值?

时间:2012-06-20 06:09:48

标签: sql-server-2005

下面我展示了两个表以及结果表。

enter image description here

如何以上面显示的方式获取结果表?

3 个答案:

答案 0 :(得分:6)

select min(ID) as ID,
       Val,
       stuff((select ','+Cat
              from Table2 as T2
              where T1.Val = T2.Val
              for xml path(''), type).value('.', 'nvarchar(max)'), 1, 1, '') as Cat
from Table2 as T1
group by Val
order by ID

SQL Fiddle

答案 1 :(得分:0)

DECLARE @Table1 TABLE
( 
 id INT
 ,Val VARCHAR(100)
)
DECLARE @Table2 TABLE
(
id INT
,Val VARCHAR(100)
,Cat VARCHAR(100)
)

INSERT INTO @Table1
VALUES(1,'XYZ')

INSERT INTO @Table1
VALUES(2,'abc')

INSERT INTO @Table2
VALUES(1,'XYZ','a')

INSERT INTO @Table2
VALUES(1,'abc','e')

INSERT INTO @Table2
VALUES(1,'XYZ','b')

INSERT INTO @Table2
VALUES(1,'XYZ','f')

INSERT INTO @Table2
VALUES(1,'abc','g')


SELECT t1.id,t1.Val ,( SELECT STUFF((SELECT ',' + cat  FROM @Table2 t2 WHERE  t2.Val =                   t1.val FOR XML PATH('')),1,1,''))
 FROM   @Table1 t1

答案 2 :(得分:0)

您可以定义 CLR用户定义聚合来执行此操作。我发布了这样一个解决方案的详细描述,作为另一个问题的答案 - TSQL Comma Separation。在那里,您还可以找到一篇博客文章的链接,该文章讨论了在开发CLR聚合时可能遇到的问题。

将自定义聚合部署到服务器后(我将命名为Concat但您的命名可能不同),您将能够使用以下查询获得所需的结果:

SELECT Val, dbo.Concat(Cat)
FROM Table2
GROUP BY Val