有几个示例将处理单个表的字符串连接在一起。就我而言,我要考虑两个表。
表A requestid int PK
表B requestid int 文档名称varchar(50)
表A requestid当然是唯一的,其中表B requestid可能有多行。表B可以包含与表A中的相同requestid的多个关系。另外,表A的某些requestid在表B中可能没有任何关联的记录。
我需要提取并加入两个表。表A包含约30万行,表B包含约14万行。请参阅下面的数据以说明我需要实现的目标。
表A样本
requestid FieldA FieldB FieldC
1 33 44 22
2 15 23 73
3 26 73 34
表B样本
requestid documentname
1 firstdoc.doc
1 seconddoc.doc
1 thirddoc.doc
3 onedoc.doc
3 lastdoc.doc
预期结果:
requestid FieldA FieldB FieldC documentname
1 33 44 22 firstdoc.doc, seconddoc.doc, thirddoc.doc
2 15 23 73 NULL
3 26 73 24 onedoc.doc, lastdoc.doc
在我的解决方案中,非常重要的一点是,没有相关文档的requestid仍然存在于结果中。
希望我的问题很清楚,谢谢。
答案 0 :(得分:0)
使用stuff
可以轻松完成此操作
参见下面的示例
declare @tableA table (requestid int, fieldA int, fieldB int, fieldC int)
declare @tableB table (requestid int, documentname varchar(50))
insert into @tableA values (1, 33, 44, 22), (2, 15, 23, 73), (3, 26, 73, 34)
insert into @tableB values (1, 'firstdoc.doc'), (1, 'seconddoc.doc'), (1, 'thirddoc.doc'), (3, 'onedoc.doc'), (3, 'lastdoc.doc')
select a.requestid, a.fieldA, a.fieldB, a.fieldC,
stuff(( ( select ',' + b.documentname
from @tableB b
where b.requestid = a.requestid
order by 1
For XML PATH (''))
), 1, 1, '') as docname
from @tableA a
结果是
requestid fieldA fieldB fieldC docname
--------- ------ ------ ------ --------
1 33 44 22 firstdoc.doc,seconddoc.doc,thirddoc.doc
2 15 23 73
3 26 73 34 lastdoc.doc,onedoc.doc