以下是我的表
表A
Signature Parent
001
002 001
003 002
004 002
005 001
006 003
007
008 007
009 008
现在我需要从每个孩子的顶级记录(这一个没有父母)获得签名。我可以称之为OrgSignature。 OrgSignature对每个孩子都是一样的。
Signature Parent OrgSignature
001
002 001 001
003 002 001
004 002 001
005 001 001
006 003 001
007
008 007 007
009 008 007
那么例如如何将001签名作为OrgSignature获取006记录?
我不知道如何更好地解释这一点......在表A中我有一些父母的记录和一些没有父母的记录。对于每条记录,我都可以创建孩子:
001 -> 002
-> 004
-> 005
-> 003
-> 006
-> 007
记录002-007之间存在关系,但是对于每条记录,有1条最高记录 - 001.我需要为此层次结构中的每个孩子获得此顶级记录签名。
答案 0 :(得分:1)
我认为这里需要一个递归的cte来考虑你的hier的可变深度
Declare @Hier table (Signature varchar(10),Parent varchar(10))
Insert into @Hier values
('001', null),
('002','001'),
('003','002'),
('004','002'),
('005','001'),
('006','003'),
('007', null),
('008','007'),
('009','008')
;with cteP as (
Select OrgSignature = Signature
,Signature
,Parent
From @Hier
Where Parent is null
Union All
Select p.OrgSignature
,r.Signature
,r.Parent
From @Hier r
Join cteP p on r.Parent = p.Signature)
Select A.Signature
,A.Parent
,OrgSignature = case when Parent is null then null else A.OrgSignature end
From cteP A
Order By 1
返回