2010-07-01 7 views
2

Utilisation de Sql-Server 2005.aide avec requête tsql récursive

J'ai une table Utilisateurs avec 3 colonnes. userID, parentUserID et userEmail. Les utilisateurs de niveau supérieur ont null dans parentUserID, les utilisateurs enfants ont un userID. Je souhaite écrire une requête qui compte les enfants jusqu'au niveau le plus bas de certains ID utilisateur.

Sélectionnez l'utilisateur avec tous ses enfants, leurs enfants .... etc. J'ai juste besoin du compte de ces utilisateurs ci-dessous l'utilisateur de niveau supérieur. Je n'ai pas besoin de détails ou de leur userID.

grâce

Répondre

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

Vous devez -1 là quelque part, de sorte que l'utilisateur cible est pas compté comme l'un de ses enfants. –

+1

@Philip - Non. Le niveau supérieur est 'parentUserID = @TargetUserId' pas 'UserID = @TargetUserId' de sorte que l'utilisateur cible n'est jamais amené. –

+0

@eugeneK Il me manquait un point-virgule avant le CTE que j'ai maintenant édité . –