值大于值的SQL计数列

值大于值的SQL计数列,sql,tsql,sql-server-2012,Sql,Tsql,Sql Server 2012,我有一个基本的select查询,它查看表中的一些示例数据。我想得到三条信息 样本总数(总记录) 有多少人的分数大于或等于85 有多少人得分低于85分 数据: ScoreID RecordID Score ErrorMarkedToQID ErrorActionID 1 2 30 Q00019 1 2 2 100 Q20039 3 3 3 30 Q10091 3 4 3 35 Q00019 5 6 4 5 Q10091

我有一个基本的select查询,它查看表中的一些示例数据。我想得到三条信息

  • 样本总数(总记录)
  • 有多少人的分数大于或等于85
  • 有多少人得分低于85分
数据:

ScoreID RecordID    Score   ErrorMarkedToQID    ErrorActionID
1   2   30  Q00019  1
2   2   100 Q20039  3
3   3   30  Q10091  3
4   3   35  Q00019  5
6   4   5   Q10091  3
这就是我所尝试的:

DECLARE @startDate DATE = '2018/09/12', @endDate DATE = '2018/09/24'

SELECT COUNT(s.ScoreID) AS totalSamples,
       COUNT(CASE WHEN s.Score >= 85 THEN 1 ELSE 0 END) AS Pass,
       COUNT(CASE WHEN s.Score < 85 THEN 1 ELSE 0 END) AS Fail
  FROM [SubmissionScores] AS s
  JOIN Submission AS sub
  ON sub.SubmissionID = s.RecordID
  WHERE sub.DateSubmittedUTC BETWEEN @startDate AND @endDate
声明@startDate日期='2018/09/12',@endDate日期='2018/09/24'
选择计数(s.ScoreID)作为totalSamples,
计数(当s.得分>=85时为1,否则为0结束)为通过,
计数(s.得分<85时为1,否则为0)为失败
来自[SubmissionScores]作为s
以子用户身份加入提交
在sub.SubmissionID=s.RecordID上
其中,sub.Date在@startDate和@endDate之间提交
我当前的输出是所有字段都输出5,这是记录的总数。所以我的
案例逻辑似乎不正确

这可以像我正在尝试的那样在一个简单的查询中完成吗?

声明@startDate DATE='2018/09/12',@endDate DATE='2018/09/24'
DECLARE @startDate DATE = '2018/09/12', @endDate DATE = '2018/09/24'

SELECT COUNT(s.ScoreID) AS totalSamples,
       COUNT(CASE WHEN s.Score >= 85 THEN 1 ELSE NULL END) AS Pass,
       COUNT(CASE WHEN s.Score < 85 THEN 1 ELSE NULL END) AS Fail
  FROM [SubmissionScores] AS s
  JOIN Submission AS sub
  ON sub.SubmissionID = s.RecordID
  WHERE sub.DateSubmittedUTC BETWEEN @startDate AND @endDate
选择计数(s.ScoreID)作为totalSamples, 计数(当s.得分>=85时,则为1,否则为空结束)作为通过, 计数(s.得分<85时为1,否则为空结束)为失败 来自[SubmissionScores]作为s 以子用户身份加入提交 在sub.SubmissionID=s.RecordID上 其中,sub.Date在@startDate和@endDate之间提交
Count()函数将返回与指定条件匹配的行数,但您的Case()有匹配和不匹配的结果,因此它在所有情况下都返回相同的(总)行数 对于Case()0或1,可以使用sum()来汇总案例的结果

 DECLARE @startDate DATE = '2018/09/12', @endDate DATE = '2018/09/24'

SELECT COUNT(s.ScoreID) AS totalSamples,
       SUM(CASE WHEN s.Score >= 85 THEN 1 ELSE 0 END) AS Pass,
       SUM(CASE WHEN s.Score < 85 THEN 1 ELSE 0 END) AS Fail
  FROM [SubmissionScores] AS s
  JOIN Submission AS sub
  ON sub.SubmissionID = s.RecordID
  WHERE sub.DateSubmittedUTC BETWEEN @startDate AND @endDate
声明@startDate日期='2018/09/12',@endDate日期='2018/09/24'
选择计数(s.ScoreID)作为totalSamples,
总和(如果s.得分>=85,则为1,否则为0)作为及格,
总和(如果s.得分<85,则为1,否则为0)视为失败
来自[SubmissionScores]作为s
以子用户身份加入提交
在sub.SubmissionID=s.RecordID上
其中,sub.Date在@startDate和@endDate之间提交

我想我刚刚意识到这些计数应该是
SUM()
:/有时我只需要把它写出来就可以捕捉到它。或者
count(…)
排除在
之外。@VamsiPrabhala谢谢!我不知道也可以这样做。在这种情况下,使用SUM vs COUNT有对与错吗?@SBB您重新发现了错误!继续并
sum
@SBB如果这是一个PEBKAC,将解决方案作为答案发布并接受它。