SQL 父子 - 主父

SQL Parent Child - Master Parent

我需要确定许多链接子代码的主父代码,但我一直收到最大递归错误。我还是 SQL 的新手,有人可以帮我解决这个问题吗?

理想情况下,我希望最终结果看起来像这样:

我一直在玩的代码如下所示:


WITH Hierarchy(Code, Previous_Code, Master_Parent)
AS
(
SELECT CAST(Code AS VARCHAR(MAX)), CAST(Previous_Code AS VARCHAR(MAX)), CAST('' AS VARCHAR(MAX))
    FROM Test AS LastGeneration
    WHERE CAST(Code AS VARCHAR(MAX)) NOT IN (SELECT COALESCE(CAST(Previous_Code AS VARCHAR(MAX)), '0') FROM Test)     
UNION ALL
SELECT CAST(PrevGeneration.Code AS VARCHAR(MAX)), CAST(PrevGeneration.Previous_Code AS VARCHAR(MAX)),
CAST(CASE WHEN Child.Previous = ''
    THEN(CAST(Child.Code AS VARCHAR(MAX)))
    ELSE(Child.Previous + '.' + CAST(Child.Code AS VARCHAR(MAX)))
END AS VARCHAR(MAX))
    FROM Test AS PrevGeneration
    INNER JOIN Hierarchy AS Child ON PrevGeneration.Code = Child.Previous_Code
)
SELECT *
FROM Hierarchy
OPTION(MAXRECURSION 32767)
Declare @YourTable table (Code varchar(25),Previous_Code varchar(25))
Insert into @YourTable values 
 ('AA2016', 'AA2015')
,('AA2015', 'AA2014')
,('AA2014', 'AA2013')
,('AA2013', null),
 ('BB2016', 'BB2015')
,('BB2015', 'BB2014')
,('BB2014', 'BB2013')
,('BB2013', null),
 ('CC2016', 'CC2015')
,('CC2015', 'CC2014')
,('CC2014', 'CC2013')
,('CC2013', null)

;with cteP as (
      Select Code
            ,Previous_Code 
            ,Master_Parent = Code
            ,Master_Parent_History = cast(Code as varchar(200))
      From   @YourTable 
      Where  Previous_Code is Null
      Union  All
      Select r.Code
            ,r.Previous_Code 
            ,p.Master_Parent
            ,cast(r.Code+','+p.Master_Parent_History as varchar(200))
      From   @YourTable r
      Join   cteP p on r.Previous_Code  = p.Code)
Select Code
      ,Previous_Code 
      ,Master_Parent
      ,Master_Parent_History = case when Master_Parent_History=Code then null else  replace(Master_Parent_History,Code+',','') end
 From  cteP
 Order By Left(Code,1), Code Desc

Returns