with cte as
(
select a.ID,a.CODE,a.GROUP_NAME, 0 as lvl from SYS_GROUP a
where a.SG00 = 2452
union all
select b.ID,b.CODE,b.GROUP_NAME,lvl + 1 from cte a inner join SYS_GROUP b
on PATINDEX(a.SG10 + '%', b.SG10) > 0 and b.SG10 != a.SG10
)
select a.SG00,a.SG10,a.SG01,lvl from cte a;
因公司通过code来区分层级。如:
001 公司
001001 部门
00100101 组
00100102 组
如果不加“ and b.SG10 != a.SG10”会造成死循环。