【发布时间】:2018-10-03 15:35:38
【问题描述】:
我要做的是找到所有相关记录。问题是,似乎我只能获得第三条相关记录,而且什么也没有。我们的记录可以有 5 个以上的家属。
这是我的初始查询
CREATE TABLE #Data (
field1 varchar(25),
field2 varchar(50))
insert into #Data (field1, field2)
VALUES ('02968365','05431590'),
('02968365','05431590'),
('04355059','04460576'),
('04355059','05339398'),
('04460576','04776412'),
('04512483','04983582'),
('04512483','05434032'),
('04561297','05482964'),
('04561297','04801903'),
('04776412','05339398'),
('04801903','05482964'),
('04844609','05431253'),
('04844609','05431253'),
('04983582','05434032')
select distinct
rtrim(d1.field1) field1,
STUFF((SELECT DISTINCT '/' + rtrim(d2.field2)
from #Data d2
where d1.field1 = d2.field1
FOR XML PATH(''), TYPE
).value('.', 'NVARCHAR(MAX)')
,1,0,'') field2
FROM #Data d1
这是查询产生的结果:
field1 field2
______________________________
1 | 02968365 | /05431590
2 | 04355059 | /04460576/05339398
3 | 04460576 | /04776412
4 | 04512483 | /04983582/05434032
5 | 04561297 | /04801903/05482964
6 | 04776412 | /05339398
7 | 04801903 | /05482964
8 | 04844609 | /05431253
9 | 04983582 | /05434032
这些是相关的行
2、3、6 - 第 2 行 field2 中的 04460576 连接到第 3 行 field1 中的 04460576,04776412 第 3 行 field2 连接到第 6 行中的 04776412 field1
4、9 - 第 4 行字段 2 中的 04983582 连接到 04983582 第 9 行字段 1
5、7 -- 第 5 行 field2 中的 04801903 连接到第 7 行 field1 中的 04801903
我需要的是连接那些仍然相关的记录或如果它们在 field2 列中连接,则将它们从列表中删除。
这就是我要找的。我希望让它们按所示排序:
field1 field2
______________________________
1 | 02968365 | /05431590
2 | 04355059 | /04460576/04776412/05339398
3 | 04512483 | /04983582/05434032
4 | 04561297 | /04801903/05482964
5 | 04844609 | /05431253
我怎样才能做到这一点?
【问题讨论】:
-
使用递归 cte?
标签: sql sql-server tsql sql-server-2012