我有两个字段RDN
和Rprob
的sql db(一个表)。我想报告来自RDN
的哪些记录与来自Rprob
的特定记录相匹配,我希望它能够搜索我拥有的所有3400条记录。
数据示例:
它应该返回类似于:aa
在1,2,3 bb
上找到仅在1上找到而cc
仅在2上找到
答案 0 :(得分:0)
您正在寻找XML PATH
和STUFF
。以下查询将通过RProb对RDN的不同出现进行分组和连接。
declare @test table (
rdn int,
rprob varchar(2)
);
insert into @test
values
(1, 'aa'),
(1, 'aa'),
(1, 'bb'),
(2, 'aa'),
(2, 'cc')
select rprob + ' found in: ' +
stuff((
select distinct ', ' + cast(rdn as varchar(max))
from @test t
where r.rprob = t.rprob
for xml path(''),type).value('(./text())[1]','varchar(max)'),1,2,'') as valz
from @test r
group by r.rprob
<强>返回:强>
FoundIn
aa found in: 1, 2
bb found in: 1
cc found in: 2
在此处详细了解FOR XML PATH
:https://msdn.microsoft.com/en-us/library/ms178107.aspx
此处STUFF
:https://msdn.microsoft.com/en-us/library/ms188043.aspx
STRING_AGG
是vNext和Azure SQL中的新功能,如果您可以利用它,绝对值得一看:https://msdn.microsoft.com/en-us/library/mt790580.aspx