См. Таблицу TABLE
ниже:
ID FIELD_1
-------------
1 123
1 456
1 789
2 111
Я хотел бы перечислить все FIELD_1
с для каждого ID следующим образом:
select [ID],
stuff((
select '; ' + [FIELD_1]
from [TABLE] t1
where t1.[ID] = t2.[ID]
for xml path ('')
),1,1, '') as [FIELDS]
from [TABLE] t2
Вывод:
ID FIELDS
------------
1 123; 456; 789
2 111
Но теперь; каждый FIELD_1
может иметь несколько записей в другой таблице (TABLE2
):
FIELD_1 FIELD_2
------------------
123 A
123 B
456 B
111 C
111 X
111 Z
Мне нужно добавить их в свой вывод, как показано ниже:
ID FIELDS
------------
1 123 (A, B); 456 (B); 789
2 111 (C, X, Z)
Итак, я попробовал это, присоединившись к следующему:
select [ID],
stuff((
select '; ' + [FIELD_1] + [FIELD_2]
from [TABLE] t1
where t1.[ID] = t2.[ID]
for xml path ('')
),1,1, '') as [FIELDS]
from [TABLE] t2
left join [TABLE2] t3 on t2.[ID] = t3.[ID]
Но это возвращает строку для каждого вхождения FIELD_1
в TABLE2
.
Каков правильный путь для этого запроса?Нужно ли использовать STUFF()
в существующем STUFF()
select?