在SQL中选择Count Top Inner Join和Where子句

时间:2013-12-09 13:54:07

标签: sql-server

这是我的查询:

SELECT TOP 3 tablestudentanswer.examid, 
             tablestudentanswer.studentid, 
             tablestudentanswer.itemno, 
             tablestudentanswer.studentanswer, 
             tablescore.score 
FROM   tablestudentanswer 
       INNER JOIN tablescore 
               ON tablestudentanswer.studentid = tablescore.studentid 
                  AND tablestudentanswer.examid = tablescore.examid 
WHERE  tablestudentanswer.examid = 1 
       AND tablestudentanswer.itemno = 1 
ORDER  BY tablescore.score ASC 

它返回此表:

ExamID  StudentID  ItemNo  StudentAnswer   Score
1006    1          1       A               25
1005    1          2       B               30
1004    1          3       A               35

我想做的是,如果StudentAnswer ='A',它将返回2,如果StudentAnswer ='B',它将返回1 伙计们我的查询在顶部没有任何问题。我要问的是我应该在该查询中添加什么。

我有这个在我看来应该返回2,但它是一个错误。

Select COUNT(*) From (
Select Top 3 TableStudentAnswer.ExamID, TableStudentAnswer.StudentID, TableStudentAnswer.ItemNo, TableStudentAnswer.StudentAnswer, TableScore.Score 
from TableStudentAnswer
Inner join TableScore on TableStudentAnswer.StudentID=TableScore.StudentID and TableStudentAnswer.ExamID=TableScore.ExamID
where TableStudentAnswer.ExamID=1 and TableStudentAnswer.ItemNo=1
Order By TableScore.Score Asc) where TableStudentAnswer.StudentAnswer = 'A' 

它应该返回:

2

请帮助我!

2 个答案:

答案 0 :(得分:2)

这会吗?

SELECT TOP 3 tablestudentanswer.examid, 
             tablestudentanswer.studentid, 
             tablestudentanswer.itemno, 
             tablestudentanswer.studentanswer, 
             tablescore.score,
             case 
              when tablestudentanswer.studentanswer = 'A' then 2
              when tablestudentanswer.studentanswer = 'B' then 1
              else NULL
             end as [MyColumn]
FROM   tablestudentanswer 
       INNER JOIN tablescore 
               ON tablestudentanswer.studentid = tablescore.studentid 
                  AND tablestudentanswer.examid = tablescore.examid 
WHERE  tablestudentanswer.examid = 1 
       AND tablestudentanswer.itemno = 1 
ORDER  BY tablescore.score ASC 

你的问题有点不清楚。也许你想要每个答案的数量?

count(1) over (partition by tablestudentanswer.studentanswer)

这将为您提供一列,其中包含给定studentanswer的所有答案的数量到结果集中的每一行。但请注意,这可能会很慢。如果可以的话,最好使用正常的group by

答案 1 :(得分:0)

您的意思是您希望查询返回答案数量吗?如果是这样,使用COUNT可能会有所帮助。

SELECT   tablestudentanswer.studentid,
         tablestudentanswer.studentanswer
         COUNT(1) AS NumberOfAnswers
FROM   tablestudentanswer 
   INNER JOIN tablescore 
           ON tablestudentanswer.studentid = tablescore.studentid 
              AND tablestudentanswer.examid = tablescore.examid 
GROUP BY tablestudentanswer.studentid, tablestudentanswer.studentanswer

如果我错了,请纠正我。

顺便说一句,为什么你的结果表不包含itemno,即使你在SELECT语句中有它?