2012-02-27 4 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

추신 : 코드 작성이 쉬워야한다고 생각한다면 혼자가 아닙니다. SQL Server에 GROUP_CONCAT() 함수가 추가되도록 투표하십시오.이 기능을 사용하면 간단하고 일반적인 필요를 표현하기 위해 kludgy 및 복잡한 해결 방법을 사용하지 못하게됩니다. http://connect.microsoft .com/SQLServer/feedback/details/247118/sql-needs-version-of-mysql-group-concat-function –