选择总计只返回SQL Server中的一条记录

时间:2017-08-10 13:33:51

标签: sql sql-server database tsql

花了3个多小时后,我放弃了。

我有四张桌子:

from selenium.webdriver.support.select import Select as WebDriverSelect
select_element = WebDriverSelect(driver.find_element_by_xpath("//*[@id='code' and @name='Code1']"))
select_element.select_by_index(0)

我的最终目标是让每个管理中的用户总数由用户角色分开(我在这里有两个角色:家长和社团成员)

我一直在使用以下代码

Users, Approvals, Centers, Managements 

我希望查询结果如下:

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

然而结果集总是给我

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

任何想法如何将结果合并到只有1条记录?

2 个答案:

答案 0 :(得分:2)

您可以查询如下:

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

答案 1 :(得分:1)

请尝试这样的事情(未经测试)

; 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