连接另一个 table 的结果

Concatenate results from another table

我有两张桌子

TableA has three fields
Id | FieldA | SomethingElse

TableB has three fields as well
Id | FieldA_FK | FieldB

我们可以加入

的表格
TableA.FieldA = TableB.FieldA_FK

我想 select 这两个表上的值以检索以下数据集:

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

您可以使用 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 

Demo

这并不像它应该的那样明显,但您可以滥用 SQL的XML方法:

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

看到这个fiddle: http://sqlfiddle.com/#!3/0fdd52/5