powered by simpleCommunicator - 2.0.53     © 2025 Programmizd 02
Форумы / Microsoft SQL Server [игнор отключен] [закрыт для гостей] / Соединение строк в запросе
7 сообщений из 7, страница 1 из 1
Соединение строк в запросе
    #39933881
Saniacot
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Есть запрос типа:
Код: sql
1.
2.
3.
4.
5.
6.
select
t1.pole4
,p1=MAX(info.pole1)
from table1 t1
outer apply
	(select pole1, pole2 from table2 t2 where t2.pole3 = t1.pole3) info


Подзапрос в outer apply (select pole1, pole2 from table2 t2 where t2.pole3 = t1.pole3) возвращает несколько значений, но так как мы используем агрегатную функцию Max ошибки нет.
Как правильнее всего построить запрос, чтобы в поле p1 значения вывелись через запятую ("Вася", "Петя", "Вова")?

Читал про функцию STRING_AGG, но она вроде бы появилась только в версии 2017 года.
Раньше пользовался таким трюком, но в данной ситуации он кажется громоздким:
Код: sql
1.
2.
3.
4.
DECLARE @Text NVARCHAR(MAX)

			SELECT 
        @Text = ISNULL(@Text + ', ','') + (pole) from ...   


Буду благодарен за cовет, спасибо.
Версия Microsoft SQL Server 2008 R2 (SP3)
...
Рейтинг: 0 / 0
Соединение строк в запросе
    #39933903
Фотография alexeyvg
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Saniacot
Читал про функцию STRING_AGG, но она вроде бы появилась только в версии 2017 года.
Из ФАКа:
Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
create table #test (id int, txt varchar(20))
go
insert #test values (1,'привет')
insert #test values (1,'дорогой')
insert #test values (1,'друг')
insert #test values (2,'test')


select id ,( select txt + ' ;' as 'data()' from #test t2 where t1.id=t2.id for xml path('') )
from #test t1
group by id
go
drop table #test
go
...
Рейтинг: 0 / 0
Соединение строк в запросе
    #39933961
Saniacot
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
alexeyvg,

Cпасибо за совет! Так как запрос гораздо более громоздкий, чем в примере, создал функцию и вызвал её в запросе.
...
Рейтинг: 0 / 0
Соединение строк в запросе
    #39933972
Фотография alexeyvg
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Saniacot
Cпасибо за совет! Так как запрос гораздо более громоздкий, чем в примере, создал функцию и вызвал её в запросе.
Скалярную? Это может быть очень медленно, лучше вставить код в запрос.
...
Рейтинг: 0 / 0
Соединение строк в запросе
    #39934110
felix_ff
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Saniacot,

Поищите clr аналог groupconcat. Очень удобная штука если версия сервера не позволяет использовать string_ agg
...
Рейтинг: 0 / 0
Соединение строк в запросе
    #39934138
Saniacot
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
alexeyvg
Saniacot
Cпасибо за совет! Так как запрос гораздо более громоздкий, чем в примере, создал функцию и вызвал её в запросе.
Скалярную? Это может быть очень медленно, лучше вставить код в запрос.

Да, и да, работает действительно медленнее, воспользуюсь Вашим советом, спасибо.
felix_ff
Saniacot,

Поищите clr аналог groupconcat. Очень удобная штука если версия сервера не позволяет использовать string_ agg

Спасибо, поищу для общего развития как минимум:)
...
Рейтинг: 0 / 0
Соединение строк в запросе
    #39934143
felix_ff
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Saniacot,

при этом clr агрегаты могут принимать множественные параметры, я в свое время собственную написал с блекджеком и шлюхами которая включала функционал внутренней сортировки аналогичный предложению within group
...
Рейтинг: 0 / 0
7 сообщений из 7, страница 1 из 1
Форумы / Microsoft SQL Server [игнор отключен] [закрыт для гостей] / Соединение строк в запросе
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]