powered by simpleCommunicator - 2.0.53     © 2025 Programmizd 02
Форумы / Microsoft SQL Server [игнор отключен] [закрыт для гостей] / Помогите написать запрос
9 сообщений из 9, страница 1 из 1
Помогите написать запрос
    #39959741
I dont know
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Приветствую, помогите написать запрос, суть:
Имеются две таблицы SBTaskAttach (вложения в задачу, документы) и SBTask (задачи), один документ может быть вложен в несколько задач. Нужно на выходе получить табличку типа: <ИД вложения> <список задач в строчку через запятую>. Для использования в дальнейшем join-e, джойнить буду по поллю AttachID

Список задач, в которые вложен документ я получил таким образом:
Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
declare @a varchar(max)

select @a = coalesce(@a,  '', '') + ',' + cast(t.XRecID as varchar) from
	(select TaskID from SBTaskAttach where AttachID=34974738) att
join 
	(select xrecid, Subject, StandardRoute from SBTask where StandardRoute not in (24154818, 36257438, 4383004, 20394678, 33665941, 859568, 28612983)) t
on att.TaskID = t.XRecID

select right(@a, len(@a)-1), attachID from SBTaskAttach


Но здесь результат возвращается в переменную, привязать эту строку к в данном случае AttachID я никак не могу. Как можно выкрутиться?
...
Рейтинг: 0 / 0
Помогите написать запрос
    #39959743
msLex
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
I dont know,

string_agg
...
Рейтинг: 0 / 0
Помогите написать запрос
    #39959749
I dont know
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
msLex,

Спасибо, но не подойдёт, сервер старый - 2008r2, там такой функции нет :(
может как-то можно использовать for xml path('') ?
...
Рейтинг: 0 / 0
Помогите написать запрос
    #39959765
msLex
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
I dont know,
Тема поднималась на форуме много раз

Вот, полистайте
https://www.sql.ru/forum/afsearch.aspx?s=string_agg&submit=?????&bid=1
...
Рейтинг: 0 / 0
Помогите написать запрос
    #39959809
godsql
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
I dont know,

просто список attachID через запятую
select (
select attachID + ','
from SBTaskAttach as a
for xml path(''))
...
Рейтинг: 0 / 0
Помогите написать запрос
    #39959850
I dont know
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
godsql,

Спасибо, так уже вроде начало получаться. Переписал запрос так

Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
select a.attachID, (
	select cast(TaskID as varchar) + ','
	from SBTaskAttach as att 
	join 
		(select xrecid from SBTask where StandardRoute not in (24154818, 36257438, 4383004, 20394678, 33665941, 859568, 28612983)) t
	on att.TaskID = t.XRecID
	where att.AttachID = a.AttachID
	for xml path(''))
from SBTaskAttach a
where AttachID = 34974738



На выход е практически то что нужно, только почему-то в количестве 10 строк(повторяющихся), как сделать чтобы была одна? Без top-ов и тому подобных явных ограничителей?
...
Рейтинг: 0 / 0
Помогите написать запрос
    #39959854
I dont know
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Вроде distinct сразу вначале перед a.attachID помог - в результате осталась одна запись, как надо, это правильный способ?
...
Рейтинг: 0 / 0
Помогите написать запрос
    #39960015
godsql
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
I dont know,

все правильно. Вы по одной и той же таблице делаете проходы.

можно заменить

from SBTaskAttach a
where AttachID = 34974738

на

from (select distinct AttachID from SBTaskAttach
where AttachID = 34974738) as a

ну или по логике, если вообще выборка идет по одному AttachID = 34974738, то

from (select AttachID = 34974738) as a
...
Рейтинг: 0 / 0
Помогите написать запрос
    #39960052
godsql
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
или вообще...

declare @AttachID int = 34974738

select @AttachID, (
select cast(TaskID as varchar) + ','
from SBTaskAttach as att
join
(select xrecid from SBTask where StandardRoute not in (24154818, 36257438, 4383004, 20394678, 33665941, 859568, 28612983)) t
on att.TaskID = t.XRecID
where att.AttachID = @AttachID
for xml path(''))
...
Рейтинг: 0 / 0
9 сообщений из 9, страница 1 из 1
Форумы / Microsoft SQL Server [игнор отключен] [закрыт для гостей] / Помогите написать запрос
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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