2011-10-06 52 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