SELECT 地区表1.地区编号, 地区表1.地区名称, 地区表1.上级编号, Cast(地区表1.地区名称 as nvarchar(4000)) AS 详细地区名称
FROM 地区表 地区表1
WHERE 地区表1.上级编号 = 0
UNION ALL
SELECT 地区表2.地区编号, 地区表2.地区名称, 地区表2.上级编号, CTE.详细地区名称+''+ Cast(地区表2.地区名称 as nvarchar(4000)) AS 详细地区名称
FROM 地区表 地区表2
INNER JOIN TEST_CTE CTE ON 地区表2.上级编号=CTE. 地区编号
)
SELECT TEST_CTE.地区编号, TEST_CTE.详细地区名称 AS 地区名称, TEST_CTE.上级编号 FROM TEST_CTE ORDER BY TEST_CTE.地区编号
OPTION(MAXRECURSION 3)
复制代码
这里整体上使用UNION ALL 进行全连接,UNION ALL 之上是查出父ID,是第一级,UNION ALL 之下是子ID的查询,也就是第二级、第三级,最后使用子ID等于父ID,基本上就可以了,注意Cast,需要转一下类型要不会报错,OPTION(MAXRECURSION 3)
网上所是递归次数 ,最后得出结果如下图