2017-03-13 26 views
1

リンクされた子コードの数のマスター親コードを特定する必要がありますが、最大再帰エラーが発生しています。私はまだSQLに新しいので、誰かがこの問題で私を助けてください。SQL親子 - 親親

理想的には、私はこのような何か探して、最終的な結果がしたい:

Ideal Output

コードを私はこのようなルックスでプレーしてきた:


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) 

答えて

1
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 

返品

enter image description here

+0

ありがとうジョン。魔法のように働く。 – Myx

+0

@Myxそれは助けてくれてありがとう:) –