2012-02-04 3 views
4

Я хотел бы знать, можно ли из этой таблицыConcatenate сгруппированных строк

ID Price ServiceID 
1 50  11 
1 -10  12 
2 100  11 
2 20  11 

в группе ID, суммируют цену и сцепить ServiceID, что-то вроде этого:

ID Price ServiceID 
1 40  11,12 
2 120  11 

Это скорее просто группировать по ID и суммировать цену, но конкатенировать идентификаторы службы, что беспокоит меня.

Благодарим за участие.

+0

Я всегда думал, что нормализация была переоценена тоже :) –

+0

Почему вы хотите? В большинстве случаев это считается анти-шаблоном SQL; если мы знаем, почему, мы можем рекомендовать другой, лучше, подход ... – MatBailie

+0

Дубликат: http://stackoverflow.com/questions/273238/how-to-use-group-by-to-concatenate -strings-in-sql-server, http://stackoverflow.com/questions/5573528/string-concatenate-in-group-by-function-with-other-aggregate-функции, http://stackoverflow.com/questions/6579440/how-to-concatenate-all-strings-from-a-some-column-for-each-group –

ответ

11

Использование:

select t.id, sum(t.price) 
    , stuff((
     select distinct ',' + cast(t2.ServiceID as varchar(max)) 
     from @t t2 
     where t2.id = t.id 
     for xml path('') 
    ), 1, 1, '') 
from @t t 
group by t.id 

Выход:

----------- --------------------- --------------------- 
1   40,00     11,12 
2   120,00    11 
+3

Это действительно работает, однако, для более сложных примеров, я получаю, что столбец XYZ недопустим в списке выбора, потому что он не содержится ни в агрегатной функции, ни в предложении GROUP BY. Есть предположения? – mattpm

+0

@mattpm, создайте отдельный вопрос. –

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