2011-10-06 49 views
1

在组计数记录的问题,我必须有StudentId(int),Subject(varchar(50)),Marks(int),IsPass(int),ExamDate(Datetime)有关by子句

表可以有针对不同日期特定学生的科目多条记录一个数据库表。

我写了下面的查询:

select StudentId, Count(IsPass) 
from ExamEntry 
where IsPass =1 group by StudentId 

但不想当条件查询:

有可能是这样的:

Select StudentId, case when IsPass = 1 then count(IsPass) end 
from ExamEntry 
group by studentId 

,但它显示更多的一个记录对于特殊学生Id

我该如何实现我的目标?

回答

0

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

试试看。

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

为什么我的答案是跌投票? – Syeda

1
SELECT StudentId, 
     COUNT(CASE WHEN IsPass = 1 THEN 'X' END) AS NumberOfPasses 
FROM ExamEntry 
GROUP BY StudentId 

COUNT只能算作NOT NULL值和CASE有一个隐ELSE NULL

1

也许你需要这样的事?

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

答案就是这么简单没有人看到它:-)

SELECT StudentId, SUM(IsPass) 
FROM ExamEntry GROUP BY StudentId 
+0

也许在那里有一个Abs? – Fionnuala

+0

@Remou:好主意。我没有把它归因于该字段的名称(IsPass)以及问题提到“= 1”的事实。我猜它是0或1.这似乎链接到一个C#应用程序。我不知道如果绑定到c#中的组合,那么将存储在那里:1或-1为真? –

+0

我没有足够重视:( – Fionnuala