2012-02-27 47 views
1

我正在寫一個查詢,返回除了一列以外的所有方式相同的多行。我想要做的是將這些行合併成一行,並用逗號加入那一列。梳理多行中列的值。

所以,如果我的查詢目前返回是這樣的:

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 

這是否有意義?

有什麼建議嗎?

回答

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; 
+0

PS,如果你認爲這應該是比較容易的代碼,你並不孤單!請投票選擇將「GROUP_CONCAT()」函數添加到SQL Server中,並解釋此功能將爲您節省時間,並防止您使用kludgy和複雜的解決方法來表達一個簡單而常見的需求:http://connect.microsoft .COM/SQLServer的/反饋/信息/ 247118/SQL的需求爲版本的MySQL的組-CONCAT功能 – 2012-02-28 07:16:10