我做了一个表来存储一个二叉树,如下所示:
- NodeID
- NodeLeft
- NodeRight
NodeLeft 存储左节点的 ID。而Node right存储了正确节点的ID。
我需要编写一个程序,如果我传递一个 NodeID,它将计算左侧有多少个子节点,右侧有多少个子节点。可以分离到2个程序。
我做了一个表来存储一个二叉树,如下所示:
- NodeID
- NodeLeft
- NodeRight
NodeLeft 存储左节点的 ID。而Node right存储了正确节点的ID。
我需要编写一个程序,如果我传递一个 NodeID,它将计算左侧有多少个子节点,右侧有多少个子节点。可以分离到2个程序。
试试这个:
WITH CTE_Node(
NodeID,
NodeRigth,
NodeLeft,
Level,
RigthOrLeft
)
AS
(
SELECT
NodeID,
NodeRigth,
NodeLeft,
0 AS Level,
'P'
FROM Node
WHERE NodeID = 1
UNION ALL
SELECT
Node.NodeID,
Node.NodeRigth,
Node.NodeLeft,
Level + 1,
CASE WHEN CTE_Node.NodeLeft = Node.NodeID THEN 'R' ELSE 'L' END
FROM Node
INNER JOIN CTE_Node ON CTE_Node.NodeLeft = Node.NodeID
OR CTE_Node.NodeRigth = Node.NodeID
)
SELECT DISTINCT RigthOrLeft,
COUNT(NodeID) OVER(PARTITION BY RigthOrLeft)
FROM CTE_Node
这是一个SQL Fiddle。关卡只是在那里看看它是如何工作的。愿你以后可以使用它。
我找到了这个话题。 http://www.sqlservercentral.com/Forums/Topic1152543-392-1.aspx
表结构与我设计的表不同。但它是一棵二叉树,所以我可以使用它。
SQL Fiddle 非常有帮助。