我在sql server 2008 r2中以下列形式实现了二叉树
表二进制信息
父ID ---- LeftChildID ---- RightChildID
1 -------------- 2 -------------- 3
2 -------------- 4 --------------- 5
3 -------------- ---------------- 6 7
1(Root)
2 | 3
4 5 | 6 7
等等。现在我必须计算一个成员左侧和右侧的总成员数,例如1有3个左子女和3个右孩子。 2有1个左孩子和1个右孩子。
我可以在c#中这样做但是有没有办法在使用Procs或Functions的sql server中执行此操作?
我无法使用heirarchyid,因为此表中已填充了数据。
P.S 需要单独计算,即完全留下的孩子和总的右孩子。
答案 0 :(得分:2)
您可以创建一个这样的递归过程:
CREATE PROCEDURE BinaryTreeCount
@ParentId int,
@HowMany int OUTPUT
as
BEGIN
DECLARE @childenCount int
SET @childenCount = 0
SET @HowMany = 0
SET @LeftChildId = null
SET @RightChildId = null
SELECT @LeftChildId = LeftChildID
, @RightChildId = RightChildID
FROM yourTableName
WHERE ParendId = @ParentId
if (@LeftChildId is not null) begin
@howMany = @howMany + 1
exec BinaryTreeCount @ParentId = @LeftChildId
, @HowMany = @childenCount OUTPUT
@howMany = @howMany + @childenCount
end
if (@RightChildId is not null) begin
@howMany = @howMany + 1
exec BinaryTreeCount @ParentId = @RightChildId
, @HowMany = @childenCount OUTPUT
@howMany = @howMany + @childenCount
end
END
这只是一个想法,我还没有测试过。
答案 1 :(得分:1)
由于您使用的是SQL 2008,我很确定您可以使用递归CTE(公用表表达式)执行此操作:http://msdn.microsoft.com/en-us/library/ms186243.aspx
如果没有我面前的SQL副本,我很难显示我害怕的代码。