Sql server Case语句返回相同的值

Sql server Case语句返回相同的值,sql-server,Sql Server,我收到了以下案例陈述 SELECT schoolc, COUNT(CASE WHEN (subtestc) IN('ela','Math') AND tscrtypc ='A'THEN (ident) ELSE 0 END)AS [total Students], COUNT(CASE WHEN (testscore)IN('A','P') AND subtestc IN('ela','Math') AND tscrtypc ='A'THEN (ident) EL

我收到了以下案例陈述

   SELECT schoolc,
   COUNT(CASE WHEN (subtestc) IN('ela','Math') AND tscrtypc ='A'THEN (ident) ELSE 0 END)AS       [total Students],
   COUNT(CASE WHEN (testscore)IN('A','P') AND subtestc IN('ela','Math')  AND tscrtypc ='A'THEN (ident) ELSE 0 END)AS [students above]

  FROM [dbo].[qw_star_testing_detail]
  WHERE subtestc IN('ela','Math')
  AND tscrtypc ='A'
  GROUP BY schoolc
它试图对学生总数和学生人数进行两次单独的计算,但对两者的计算结果是相同的。当我运行这个,我得到1966,这是正确的,但当我把它应用到我的情况下,我得到2362。我必须做一些简单的事情

  select COUNT(ident),schoolc
  FROM [dbo].[qw_star_testing_detail]
  WHERE subtestc IN('ela','Math')
  AND tscrtypc ='A'
  AND testscore IN('A','P')
  GROUP BY schoolc
  ORDER BY schoolc
COUNT([column])返回结果集中指定列中具有非null值的行数。试着这样做:

SELECT schoolc,
    SUM(CASE WHEN (subtestc) IN ('ela','Math') AND tscrtypc ='A'THEN 1 ELSE 0 END) AS [total Students],
    SUM(CASE WHEN (testscore)IN ('A','P') AND subtestc IN ('ela','Math') AND tscrtypc ='A'THEN 1 ELSE 0 END) AS [students above]
FROM [dbo].[qw_star_testing_detail]
WHERE subtestc IN('ela','Math')
AND tscrtypc ='A'
GROUP BY schoolc

删除
CASE
语句的
ELSE 0
部分,则与
CASE
条件不匹配的记录将返回
NULL
,该值在聚合函数中被排除

  SELECT  schoolc
         ,COUNT(CASE WHEN (subtestc) IN('ela','Math') AND tscrtypc ='A'THEN (ident) END)AS       [total Students]
         ,COUNT(CASE WHEN (testscore)IN('A','P') AND subtestc IN('ela','Math')  AND tscrtypc ='A'THEN (ident) END)AS [students above]
  FROM [dbo].[qw_star_testing_detail]
  WHERE subtestc IN('ela','Math')
    AND tscrtypc ='A'
  GROUP BY schoolc

非常感谢现在要补充的是,我想从上述两项中得到一个百分点。尝试了以下方法