2010-07-01 119 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