Время прочтения: 3 мин.

Каждый в своей работе в Excel сталкивался с функцией Сцепить. Она применима для объединения нескольких строк в одну. А если у вас большое количество строк? Например, от 50 до 100, значение которых вам нужно вписать через запятую, или допустим  точку с запятой. Здесь уже ваше желание, каким разделителем вы захотите воспользоваться. При использовании Excel вы потратите очень много времени и ресурсов, чтобы осуществить желаемое. А помочь ускорить решить данную задачу сможет агрегатная функция STRING_AGG в T-sql.

Рассмотрим пример:

У нас есть таблица STRING_AGG со столбцами ID, Месяц, Сумма, Подразделение.

       Выполняем запрос:

Исходная таблица:

Предположим, что нам значение месяца по каждому ВСП, перечислить через запятую, (разделитель может быть любой символ) в одну строку и посчитать общую сумму по ВСП за все месяца. Для этого выполняем запрос:

String_agg и sum агрегатные функции, которые используются с группировкой, поэтому используем group by. 

Результат этого запроса:

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

Берем нашу таблицу.  Пишем запрос.Выбираем тот столбец, который необходимо разделить по строкам, перед ним пишем value.  В данном случае, функция сепаратора указывается после названия таблицы, которую мы используем. И обязательно прописываем CROSS APPLY.

STRING_SPLIT([название столбца, где наши строковые значения],[разделитель])

Получаем результат:

В результате, мы получаем месяца в разных строках по ID.

String_split –функция, которая поможет вам в считанные секунды разделить по разным строкам одну строку.Она также как и string_agg сэкономит ваше время в сцепке строк.