Sql server 与Group by子句上的计数记录相关的问题

Sql server 与Group by子句上的计数记录相关的问题,sql-server,Sql Server,我有一个数据库表,其中包含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 Studen

我有一个数据库表,其中包含
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
但它显示了不止一项针对特殊学生的记录

我怎样才能实现我的目标

SELECT StudentId,
       COUNT(CASE WHEN IsPass = 1 THEN 'X' END) AS NumberOfPasses
FROM   ExamEntry
GROUP  BY StudentId  
计数
仅计数
非空
值,且
大小写
具有隐式
否则为空


计数
仅计数
非空
值,并且
大小写
有一个隐式的
否则为空
也许您需要这样的东西

SELECT StudentId, SUM(CASE WHEN IsPass = 1 THEN 1 ELSE 0 END) AS Number_Of_Passed_Exams
FROM ExamEntry
GROUP BY StudentId

也许你需要这样的东西

SELECT StudentId, SUM(CASE WHEN IsPass = 1 THEN 1 ELSE 0 END) AS Number_Of_Passed_Exams
FROM ExamEntry
GROUP BY StudentId

若您不想使用where子句,那个么Having子句是其最简单的替代方法

试试这个

select StudentId, count(IsPass)AS PassedCount
from ExamEntry
group by StudentId,IsPass
having IsPass= 1

若您不想使用where子句,那个么Having子句是其最简单的替代方法

试试这个

select StudentId, count(IsPass)AS PassedCount
from ExamEntry
group by StudentId,IsPass
having IsPass= 1

答案很简单,没人看到:——)


答案很简单,没人看到:——)


@雷蒙:好主意。由于字段名(IsPass)和问题中提到“=1”,所以我没有把它放在这里。我猜是0还是1。这似乎与c#应用程序有关。我不知道如果绑定到c#:1或-1中的组合会存储什么?我没有给予足够的注意:(@Remou:好主意。我没有把它放在那里,因为字段名(IsPass)和问题提到“=1”。我猜是0或1。这似乎链接到了一个c#应用程序。我不知道如果绑定到c#中的组合:1或-1,会在其中存储什么。我没有充分注意:(