我只是想了解 CTE 和递归来解决我以前使用游标解决的问题。
create table ##ACC (
AccNo int,
Property char
)
Insert into ##ACC
VALUES (1,'A'),(1,'B'),(2,'A'),(2,'C'),(3,'C'),(4,'D')
我想要实现的是获取所有 AccNo 的列表,以及它们通过 Property 相关的所有 AccNo。所以我的预期结果是
PrimaryAccNo | LinkedAccNo
1 | 1
1 | 2
1 | 3
2 | 1
2 | 2
2 | 3
3 | 1
3 | 2
3 | 3
4 | 4
我尝试了以下代码和变体,但要么只得到 4 个结果(PrimaryAccNo=LinkedAccNo),要么达到 100 个递归。
WITH Groups(PrimaryAccNo, LinkedAccNo)
AS
(
Select distinct AccNo, AccNo from ##ACC
UNION ALL
Select g.PrimaryAccNo, p.AccNo from
##ACC p inner join Groups g on p.AccNo=g.LinkedAccNo
inner join ##ACC pp on p.Property=pp.Property
where p.AccNo<> pp.AccNo
)
Select PrimaryAccNo,LinkedAccNo
from Groups
我究竟做错了什么?