Sélectionnez les totaux pour renvoyer un seul logging dans SQL Server

Après avoir passé plus de 3 heures sur ce que j'ai abandonné.

J'ai quatre tables:

Users, Approvals, Centers, Managements 

Mon but ultime est d'get le nombre total d'users dans chaque gestion séparés par le rôle de l'user (j'ai deux rôles ici: Parents et membres de la société)

J'ai utilisé le code suivant

 select (select count(r.StudentId) from Users u where u.UserId = r.StudentId and u.RoleId = 10) as Parents, (select count(r.StudentId) from Users u where u.UserId = r.StudentId and u.RoleId = 11) as SocietyMembers, e.ManagementId, e.ManagmentTitle from CentersRegistrationsApprovals r --ON r.StudentId = u.UserId inner join Centers c ON c.CenterId = r.CenterId inner join Managments e ON e.ManagementId = c.EducationManagementId group by e.ManagementId, e.ManagmentTitle, StudentId 

Je m'attends à ce que le résultat de la requête soit le suivant:

 Parents SocietyMambers ManagementId ManagementName ---------------------------------------------------------------- 3 3 10 North Region 

Cependant, le jeu de résultats me donne toujours

 Parents SocietyMambers ManagementId ManagementName ---------------------------------------------------------------- 3 NULL 10 North Region NULL 3 10 North Region 

Des idées pour consolider le résultat à seulement 1 logging?

S'il vous plaît essayer quelque chose comme ça (pas testé)

 ; with CTE1 as ( select (select count(r.StudentId) from Users u where u.UserId = r.StudentId and u.RoleId = 10) as Parents, (select count(r.StudentId) from Users u where u.UserId = r.StudentId and u.RoleId = 11) as SocietyMembers, e.ManagementId, e.ManagmentTitle from CentersRegistrationsApprovals r --ON r.StudentId = u.UserId inner join Centers c ON c.CenterId = r.CenterId inner join Managments e ON e.ManagementId = c.EducationManagementId group by e.ManagementId, e.ManagmentTitle, StudentId ) SELECT MAX(Parents), MAX(SocietyMembers), ManagementId, StudentId FROM CTE1 GROUP BY ManagementId, StudentId 

Vous pouvez interroger comme ci-dessous:

 select Sum(case when u.roleId = 10 then 1 else 0 end) as Parents, Sum(case when u.roleId = 11 then 1 else 0 end) as SocietyMembers, e.ManagementId, e.ManagmentTitle from CentersRegistrationsApprovals r --ON r.StudentId = u.UserId inner join Centers c ON c.CenterId = r.CenterId inner join Managments e ON e.ManagementId = c.EducationManagementId Join Users u ON r.StudentId = u.UserId group by e.ManagementId, e.ManagmentTitle