【发布时间】:2019-02-04 07:51:58
【问题描述】:
【问题讨论】:
-
一个 rCTE(递归公用表表达式)似乎是最好的方法。到目前为止,您是否尝试过自己解决此问题?如果没有,这里有大量资源介绍如何使用 rCTE 在 SQL Server 中导航分层数据。
-
由于这似乎是一张孩子的表,所以在查询这张表时不可能有一个有0个孩子的父母。
标签: sql-server tsql hierarchy
【问题讨论】:
标签: sql-server tsql hierarchy
您可以使用递归 CTE 来完成此操作,但应该使用简单连接来完成。首先,找出每个节点的计数,不包括没有父节点的节点:
SELECT [ParentID]
,COUNT(*)
FROM MyTable
WHERE [ParentID] <> 0
GROUP BY [ParentID];
如果没问题,就加入初始表:
SELECT *
FROM MyTable T1
LEFT JOIN
(
SELECT [ParentID]
,COUNT(*) AS [all_childs]
FROM MyTable
WHERE [ParentID] <> 0
GROUP BY [ParentID]
) T2
oN T1.[parentID] = T2.[ParentID];
【讨论】:
应该没问题,ROW COUNT=0时需要isnull()函数
SELECT
PA.ID,
PA.Title_Name,
ISNULL(P.COUNTT,0) CountOfID
FROM #My_Table PA
LEFT JOIN (
SELECT COUNT(*) COUNTT, Parent_ID from #My_Table GROUP BY Parent_ID
) as P on P.Parent_ID = PA.ID
【讨论】: