首先在 CTE 中选择脚本,只获取 Child ID 中不存在的 Root Parent ID 列表
在 CTE 中 UNION ALL 之后的第二个选择脚本,要获取层次结构数据,使用具有相同 CTE 的 UNION ALL 和 JOIN 作为主表的父 ID 列的父子 ID,即#tblA
您需要使用聚合函数 COUNT() 来根据父 ID 获取子计数
您需要使用 GROUP BY 子句才能使用聚合函数 COUNT()
请检查以下脚本以获得您的预期结果。
SELECT
A.*
INTO #tblA
FROM
(
SELECT 1 ID,465 ParentID,547 ChildID UNION ALL
SELECT 2,547,653 UNION ALL
SELECT 3,653,667 UNION ALL
SELECT 4,902,1005 UNION ALL
SELECT 5,1005,1009 UNION ALL
SELECT 6,1059,1080
) A
;WITH CTE_REC
AS
(
--Get Only Root Parent ID list which are not exists in Child ID
SELECT
A.ParentID,A.ChildID
FROM #tblA A
WHERE NOT EXISTS
(
SELECT
1
FROM #tblA c
WHERE c.ChildID = A.ParentID
)
--to get Heirarchy data, use UNION ALL and JOIN with same CTE as a parent Child ID with Parent ID column of main table
UNION ALL
SELECT
CR.ParentID,ta.ChildID
FROM CTE_REC CR
INNER JOIN #tblA ta ON ta.ParentID = CR.ChildID
)
SELECT
c.ParentID,
COUNT(c.ChildID) AS NumChildren --Use aggregate function count() to get child count against parent id
FROM CTE_REC c
GROUP BY c.ParentID; -- Use Group By Clause to use aggregate function count()
DROP TABLE #tblA;