以递归方式从表中获取值

时间:2013-11-09 14:54:43

标签: sql linq

我正在尝试使用LINQ,我被困在这里。我的问题是我想要检索特定方面的所有用户的计数。让我解释。这是包含样本数据的表快照。

ID Name SponsorID PairSide
1001 User1 1000 Left
1002 User2 1001 Left
1003 User3 1001 Right
1004 User4 1001 Right
1005 User5 1004 Left
1006 User6 1004 Right
1007 User7 1002 Left
1008 User8 1002 Left
1009 User9 1003 Right
1010 User10 1001 Right

现在数据类似.. User1有4个孩子,左边1个,右边3个,User2左边有两个孩子,依此类推。 由于user2是User1的子级,因此User2的子级也将成为User1的子级。所以根据上面的数据.User1左边总共有4个孩子,右边有5个孩子。如果有任何错误,可以解决问题。但我想要一些linq或sql代码来计算这些东西

  1. 特定ID左侧的用户总数
  2. 特定ID右侧的用户总数
  3. 枚举儿童用户,以便我可以用它来显示树
  4. 这是虚拟数据,我的实际网站将包含至少20,000个数据,我必须在那里进行计算。请为我提供这方面的逻辑。

1 个答案:

答案 0 :(得分:0)

尝试以下代码

Declare @table table
(ID int,
Name varchar(20),
SponsorID int,
PairSide varchar(10)
)
insert into @table(ID,Name,SponsorID,PairSide)
values(1001, 'User1', 1000 ,'Left'),
(1002, 'User2', 1001, 'Left'),
(1003, 'User3' ,1001 ,'Right'),
(1004, 'User4' ,1001, 'Right'),
(1005, 'User5' ,1004 ,'Left'),
(1006, 'User6' ,1004 ,'Right'),
(1007, 'User7' ,1002 ,'Left'),
(1008, 'User8' ,1002 ,'Left'),
(1009, 'User9' ,1003 ,'Right'),
(1010, 'User10', 1001, 'Right')
Select Sponsorid,
Count(SponsorID) TotalChild ,
Count((Case when PairSide = 'Left' Then 1 end)) LeftChild ,
Count((Case when PairSide = 'Right' Then 1 end)) RightChild
from @table
Group by SponsorID