在多行上组合列的值。?

时间:2012-02-27 19:55:20

标签: sql sql-server sql-server-2008

我正在编写一个返回多行的查询,除了一列之外,这些行在所有方面都是相同的。我想要做的是将这些行组合成一行,并用逗号连接那一列。

因此,如果我的查询当前返回如下内容:

Animal    Name     Toy
Cat       Kitty    Mouse
Cat       Kitty    CatNip
Dog       Rover    Bone
Dog       Rover    Chew Toy

我想让它改为:

Animal Name Toy
Cat    Kitty Mouse, CatNip
Dog    Rover Bone, Chewtoy

这有意义吗?

有什么建议吗?

1 个答案:

答案 0 :(得分:6)

DECLARE @a TABLE
(
   Animal VARCHAR(32), 
   Name   VARCHAR(32), 
   Toy    VARCHAR(32)
);

INSERT @a SELECT 'Cat','Kitty','Mouse';
INSERT @a SELECT 'Cat','Kitty','CatNip';
INSERT @a SELECT 'Dog','Rover','Bone';
INSERT @a SELECT 'Dog','Rover','Chew Toy';

SELECT DISTINCT Animal, Name, Toy = STUFF((SELECT ', ' + Toy
    FROM @a AS a2
    WHERE a2.Animal = a.Animal AND a2.Name = a.Name
    FOR XML PATH(''), TYPE).value('.[1]', 'nvarchar(max)'),
    1,2,'')
FROM @a AS a;