我有两张桌子
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
答案 0 :(得分:2)
您可以使用FOR XML PATH命令:
aggregate(b~cbind(a=sub('\\.\\d+$', '', a)), df1, FUN=sum)
# a b
# 1 A 4
# 2 B 5
答案 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