Агрегатная функция Sql для получения списка

Привет!

Как я могу создать агрегатную функцию для получения списка совокупных значений.

дано :

key     value
Andrei  1
Andrei  2
Andrei  3
Mihai   4
Mihai   5
Mihai   6

Я хочу

key list
Andrei 1,2,3
Mihai 4,5,6

person Corovei Andrei    schedule 20.02.2012    source источник


Ответы (3)


Я использовал эту статью один раз, чтобы точно так же:

http://www.simple-talk.com/sql/t-sql-programming/concatenating-row-values-in-transact-sql/

person Diego    schedule 20.02.2012
comment
Я хотел создать пользовательскую агрегатную функцию, например sum(). Является ли это возможным? - person Corovei Andrei; 20.02.2012
comment
Я нашел это в вашей статье. Спасибо - person Corovei Andrei; 20.02.2012
comment
размещение ссылок на статьи делает этот ответ восприимчивым к гниению ссылок. Вместо этого, пожалуйста, возьмите то, что вы узнали из этой ссылки, и опубликуйте здесь. - person Jordan Arseno; 07.06.2018

Решение MS SQL: [Примечание. Это решение работает только с SQL 2005 и более поздними версиями. В исходном вопросе не указана используемая версия.]

SELECT 
key
, STUFF((SELECT ',' + CAST([value] AS nvarchar(max)) FROM <#Table#> WHERE (key = Results.key) FOR XML PATH ('')),1,2,'') AS NameValues
FROM <#Table#> Results
GROUP BY key
person alexsuslin    schedule 20.02.2012
comment
и хорошая вещь в этом решении заключается в том, что оно не взрывается, если у вас есть недопустимые символы xml в ваших подстроках.. о, упс, да, это так. - person satnhak; 20.02.2012
comment
насколько я вижу, значение просто int, так что это не будет проблемой - person alexsuslin; 20.02.2012
comment
Я предпочитаю решать проблему, когда она возникает, а не писать универсальные решения, соответствующие всем будущим и возможным требованиям. - person alexsuslin; 20.02.2012
comment
Моя точка зрения заключается в том, зачем выбирать симпатичное решение, которое трудно обнаружить (я знаю это, потому что кто-то говорил мне, какое это симпатичное решение, а затем мне пришлось переписать его, потому что оно не удалось сложным образом), когда вы можете использовать что-то не очень милое, что работает по всем направлениям. - person satnhak; 20.02.2012

Вам нужно имитировать функцию group_concat MySQL.

Дополнительную информацию см. в этой статье.

person aF.    schedule 20.02.2012