2012-02-27 2 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-функции –

Смежные вопросы