2010-07-01 121 views
2

使用Sql-Server 2005.帮助递归tsql查询

我有3列用户表。用户ID,parentUserID和userEmail。顶级用户在parentUserID中有空,子用户有一些用户ID。 我想写一个查询,计数到某些用户ID的最低级别的儿童。

选择用户与他的所有子女,他们的孩子....等等。我只需要那些低于顶级用户的用户数量。我不需要详细信息或他们的用户ID。

感谢

回答

3
DECLARE @TargetUserId int 
SET @TargetUserId = 1; 

WITH Children AS 

(
SELECT users.userID, users.parentUserID 
FROM users 
WHERE parentUserID = @TargetUserId 
UNION ALL 
SELECT users.userID, users.parentUserID 
FROM users 
JOIN Children ON users.parentUserID = Children.userID 
) 

SELECT COUNT(*) As SubordinateCount FROM Children 
+0

你需要一个-1那里的某个地方,从而使目标用户不能算作它的一个子。 – 2010-07-01 13:40:31

+1

@Philip - 编号顶级是'parentUserID = @TargetUserId'而不是'UserID = @TargetUserId'所以目标用户永远不会被带入。 – 2010-07-01 13:41:42

+0

@eugeneK我现在编辑的CTE之前缺少一个分号。 – 2010-07-01 13:48:37