连接另一个表的结果

时间:2015-07-20 13:57:22

标签: 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 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 个答案:

答案 0 :(得分:2)

您可以使用FOR XML PATH命令:

aggregate(b~cbind(a=sub('\\.\\d+$', '', a)), df1, FUN=sum)
#   a b
# 1 A 4
# 2 B 5

Demo

答案 1 :(得分:1)

这不应该是显而易见的,但您可以滥用 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

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