SQL匹配和组合搜索在同一个表中

时间:2017-03-18 23:30:06

标签: sql sql-server

我有两个字段RDNRprob的sql db(一个表)。我想报告来自RDN的哪些记录与来自Rprob的特定记录相匹配,我希望它能够搜索我拥有的所有3400条记录。

数据示例:

enter image description here

它应该返回类似于:aa在1,2,3 bb上找到仅在1上找到而cc仅在2上找到

1 个答案:

答案 0 :(得分:0)

您正在寻找XML PATHSTUFF。以下查询将通过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 PATHhttps://msdn.microsoft.com/en-us/library/ms178107.aspx

此处STUFFhttps://msdn.microsoft.com/en-us/library/ms188043.aspx

STRING_AGG是vNext和Azure SQL中的新功能,如果您可以利用它,绝对值得一看:https://msdn.microsoft.com/en-us/library/mt790580.aspx