Столбец SQL COUNT, где значение больше значения - PullRequest
0 голосов
/ 24 сентября 2018

У меня есть базовый запрос на выборку, который просматривает некоторые примеры данных в моей таблице.Я пытаюсь получить три фрагмента информации.

  • Всего образцов (всего записей)
  • Сколько с баллом, большим или равным 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

Мой текущий выводявляется то, что все поля выводят 5, что является общим количеством записей.Так что, похоже, моя CASE логика неверна.

Можно ли сделать это простым запросом, как я пытаюсь?

Ответы [ 2 ]

0 голосов
/ 25 сентября 2018

Функция 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
0 голосов
/ 25 сентября 2018
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
...