Tsql 连接来自另一个表的结果

Tsql 连接来自另一个表的结果,tsql,concatenation,Tsql,Concatenation,我有两张桌子 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

我有两张桌子

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]
要检索[表B.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 

这并不像应该的那样明显,但您可以滥用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
看这把小提琴:

因此
表B
对于给定的
表A有多行。字段A
?绝对,每个字段a可能没有或有多行。为什么
TableA
有主键
Id
,而
TableB
通过外键将
TableB
引用到另一列
FieldA
,而不是
Id
列?这就是数据库的设计方式。我必须处理这个问题。@cjb110我添加了一些数据示例,希望能有所帮助。效果很好,谢谢你抽出时间,蒂姆,谢谢你们也这么做了。