我有一个类别表,其中层次结构是通过ID、ParentID维护的(即一个类别的ID作为另一个类别的ParentID,则它是该元素的子级)。我想要从子级递归地向上移动到直接父级,并检查其中的一列,例如FooterAdId是否为null。如果为null,则向上继续检查,否则返回FooterAdId。我能够通过cte递归查询获得顶级父级,但是不确定如何将条件应用于上述描述的情况......
在这里,我手头有id 6,并且我想要的结果如上所述将是101。
在这里,我手头有id 6,并且我想要的结果如上所述将是101。
ROW_NUMBER()
列,命名为RowNum
。然后,基于这个CTE进行操作。WITH MyCte AS
...
SELECT TOP 1 footeradid
FROM MyCte
WHERE footeradid IS NOT NULL
ORDER BY RowNum
试试这个,
Declare @t table (id int,parentid int,footerid int)
insert into @t values(1,null,null),(2,null,100),(3,1,101),(4,3,null),(5,4,null),(6,5,null)
;with CTE as
(
select * from @t where id=6
union all
select a.* from @t a inner join cte b on a.id=b.parentid and b.footerid is null
)
select * from cte