Время прочтения: 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 сэкономит ваше время в сцепке строк.