Объединить результаты из другой таблицы
У меня две таблицы
TableA has three fields
Id | FieldA | SomethingElse
TableB has three fields as well
Id | FieldA_FK | FieldB
Мы можем присоединиться к столам на
TableA.FieldA = TableB.FieldA_FK
Я хотел бы выбрать значения в обеих этих таблицах, чтобы получить следующий набор данных:
TableA.Id, TableA.FieldA, TableA.SomethingElse, [Concatenation of TableB.FieldB]
Чтобы получить [Конкатенация TableB.FieldB], я знаю, что могу сделать
declare @result varchar(500);
set @result = '';
select @result = COALESCE(@result + ',', '') + FieldB
from TableB b
join TableA a on a.FieldA = b.FieldA_FK
select @result
Как получить описанный выше результат с конкатенацией только в одной строке результатов?
Заранее спасибо.
Примеры данных:
TableA
1 A something
2 B somethingElse
TableB
1 A Aa
2 A Ab
3 A Ac
4 B Ba
5 B Bb
Я хотел бы получить
1 A something Aa, Ab, Ac
2 B somethingElse Ba, Bb
2 ответа
Решение
Вы можете использовать команду FOR XML PATH:
SELECT
TableA.Id, TableA.FieldA, TableA.SomethingElse,
[Concatenation of TableB.FieldB] =
(STUFF((SELECT CAST(', ' + TableB.FieldB AS VARCHAR(MAX))
FROM TableB
WHERE (TableA.FieldA = TableB.FieldA_FK)
FOR XML PATH ('')), 1, 2, ''))
FROM TableA
Это не так очевидно, как должно быть, но вы можете злоупотреблять методами XML SQL:
select a.ID, a.FieldA, a.FieldB
, stuff(
(select ', ' + TableB.FieldB
from TableB
inner join TableA on TableB.TableA_FK = TableA.ID
for xml path(''), type
).value('(./text())[1]', 'varchar(max)')
, 1,2,'')
from TableA a
Смотрите эту скрипку: http://sqlfiddle.com/