【问题标题】:SQL Server - Get count(*) with filter and without filter in same querySQL Server - 在同一查询中获取带有过滤器和不带过滤器的计数(*)
【发布时间】:2020-11-11 09:45:27
【问题描述】:

在下面的查询中,我试图按部门统计所有 FTE 学生,为此我使用了过滤器 U.[IsFullTimeStudent] = 1

在同一个结果集中,我还想获取部门中学生的TotalCount,这意味着需要删除过滤器U.[IsFullTimeStudent] = 1

SELECT 
    S.[DepartmentId], COUNT(U.[StudentId]) AS TotalFTEStudents
FROM 
    [dbo].User U
INNER JOIN 
    dbo.[Student] S ON U.[UserId] = S.[UserId]
INNER JOIN 
    [dbo].Department D ON D.[DepartmentId] = S.[DepartmentID]
WHERE 
    D.[CollegeId] = 3 AND U.[IsFullTimeStudent] = 1
GROUP BY 
    S.[DepartmentId]

简而言之,我的结果集应该返回 DepartmentIdTotalFTEStudentsTotalStudents

【问题讨论】:

    标签: sql-server join filter


    【解决方案1】:

    使用条件聚合:

    SELECT S.DepartmentId,
           COUNT(CASE U.IsFullTimeStudent WHEN 1 THEN 1 END) AS FullTimeStudents,
           COUNT(U.StudentId) AS TotalFTEStudents
    FROM dbo.[User] U --USER is a Reserved Keyword, but this was one of the few objects that wasn't delimit identified. This statement would never have run
                      --Though I suggest fixing the name; don't use Reserved Keywords for object names.
         INNER JOIN dbo.Student S ON U.UserId = S.UserId
         INNER JOIN dbo.Department D ON D.DepartmentId = S.DepartmentID
    WHERE D.CollegeId = 3
    GROUP BY S.DepartmentId;
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2016-07-17
      • 1970-01-01
      • 2021-09-10
      • 1970-01-01
      • 1970-01-01
      • 2011-05-13
      • 2019-12-07
      • 2023-02-23
      相关资源
      最近更新 更多