2010-12-12 2 views

ответ

3

Агрегатная функция для SQL Server, которая производит список значений, разделенных запятыми.

Title 
----------------- 
The Hobbit 
The Two Towers  --> The Hobbit, The Two Towers, Leaf by Niggle 
Leaf by Niggle 

Вот моя реализация: A SQL CLR user-defined aggregate - notes on creating and debugging

+0

Очень полезно. У меня тоже есть это. Я назвал его toCSV, но мне не очень нравится это имя. Что вы назвали? Любые лучшие идеи? –

+0

@PAUL Mansour Я назвал свой «Concat» (сокращение от * concatenate *), но это не идеальное имя. –

+1

SQL Server имеет интересную производительность конкатенации строк. Вот некоторые тесты производительности между 'select @var = @var + column' style SQL и пользовательским агрегатом с использованием .NET' StringBuilder': [graphs] (http://imgur.com/a/MRcha) SQL-based concat становится значительно медленнее, когда общая длина строки превышает 500 тыс. символов. – geofftnz

1

Да. В Oracle я реализовал своего рода group_concat, потому что он недоступен в Oracle. Я сделал пару разных версий, которые делают простой concat с разделителями-запятыми. Другой делает то же самое, только сортируется. И есть еще один, который не использует запятую, а особый символ, поэтому результаты могут обрабатываться более легко, когда сами значения могут содержать запятую.

1
  1. СРЕДНЕВЗВЕШЕННОЕ

  2. PercentAcross - это сумма X, где условие истинно, деленная на сумму X.