#sql-server
#sql-сервер
Вопрос:
У меня есть одна таблица базы данных, имеющая StudentId(int),Subject(varchar(50)),Marks(int),IsPass(int),ExamDate(Datetime)
В таблице может быть более одной записи по одному и тому же предмету для конкретного учащегося на разную дату.
Я написал следующий запрос :
select StudentId, Count(IsPass)
from ExamEntry
where IsPass =1 group by StudentId
но не хотите, чтобы условие Where в запросе:
возможно, что-то вроде этого :
Select StudentId, case when IsPass = 1 then count(IsPass) end
from ExamEntry
group by studentId
но он отображает более одной записи для perticular StudentID
Как я могу достичь своей цели?
Ответ №1:
Ответ настолько прост, что его никто не видел 🙂
SELECT StudentId, SUM(IsPass)
FROM ExamEntry GROUP BY StudentId
Комментарии:
1. @Remou: хорошая идея. Я не поставил его из-за названия поля (IsPass) и того факта, что в вопросе упоминается «= 1». Я предположил, что это 0 или 1. Похоже, это связано с приложением c #. Я не знаю, что там будет храниться, если привязать к комбо в c #: 1 или -1 для True?
2. Я не уделяю достаточного внимания: (
Ответ №2:
SELECT StudentId,
COUNT(CASE WHEN IsPass = 1 THEN 'X' END) AS NumberOfPasses
FROM ExamEntry
GROUP BY StudentId
COUNT
подсчитывает только NOT NULL
значения и CASE
имеет неявное ELSE NULL
Ответ №3:
Возможно, вам нужно что-то подобное?
SELECT StudentId, SUM(CASE WHEN IsPass = 1 THEN 1 ELSE 0 END) AS Number_Of_Passed_Exams
FROM ExamEntry
GROUP BY StudentId
Ответ №4:
Если вы не хотите использовать для этого предложение where, то предложение Having является его простейшей альтернативой.
Попробуйте это.
select StudentId, count(IsPass)AS PassedCount
from ExamEntry
group by StudentId,IsPass
having IsPass= 1