如何修改此查询以添加每个调查的“问题”总数,总正确率和百分比是否正确?

时间:2013-07-22 20:27:25

标签: sql sql-server sql-server-2005

下面的查询为我提供了每个调查(问题),用户的答案和正确答案的所有已回答的问题。

我想修改它以添加每个特定调查的答案总数#,正确的答案(correctAnswer)和正确答案的百分比?

select sq.question,
       sc.choice,
       sq.CorrectAnswer,
       sa.score from Survey s
 INNER JOIN SurveyQuestions sq ON s.surveyId = sq.SurveyId 
 INNER JOIN SurveyChoices sc ON sq.questionId=sc.questionId
 INNER JOIN SurveyAnswers sa ON sc.choiceId = sa.choiceId
 INNER JOIN tblLogin tl ON sa.username = tl.username
 WHERE tl.username = 'JohnSmith' and sq.surveyId = 12
 ORDER BY sq.questionId

`

Survey table:
    [SurveyID] [int] IDENTITY(1,1) NOT NULL,
    [Title] [varchar](50) NULL,
    [Description] [varchar](max) NULL

SurveyQuestions table
    [QuestionID] [int] IDENTITY(1,1) NOT NULL,
    [SurveyID] [int] NULL,
    [Question] [varchar](255) NULL,
    [AnswerType] [char](1) NULL,
    [CorrectAnswer] [nvarchar](255) NULL,
    [QuestionOrder] [int] NULL
SurveyChoices table
    [ChoiceID] [int] IDENTITY(1,1) NOT NULL,
    [QuestionID] [int] NOT NULL,
    [Choice] [nvarchar](255) NOT NULL


SurveyAnswers table
    [AnswerID] [int] IDENTITY(1,1) NOT NULL,
    [QuestionID] [int] NOT NULL,
    [ChoiceID] [int] NULL,
    [ChoiceText] [varchar](max) NULL,
    [UserName] [varchar](50) NULL

非常感谢提前

2 个答案:

答案 0 :(得分:0)

尝试这样的事情

 select 
   Count(sq.surveyId) as 'total # of answered questions per survey'
   sq.question,
   sc.choice,
   sq.CorrectAnswer,
   sa.score from Survey s
 INNER JOIN SurveyQuestions sq ON s.surveyId = sq.SurveyId 
 INNER JOIN SurveyChoices sc ON sq.questionId=sc.questionId
 INNER JOIN SurveyAnswers sa ON sc.choiceId = sa.choiceId
 INNER JOIN tblLogin tl ON sa.username = tl.username
 WHERE tl.username = 'JohnSmith' and sq.surveyId = 12
 Group sq.question,
   sc.choice,
   sq.CorrectAnswer,
   sa.score
 ORDER BY sq.questionId

答案 1 :(得分:0)

假设我正在正确阅读您的问题,您当前的查询会针对每个问题返回一行,但您希望在此查询中包含调查数据?那么对于每个问题,您还有该问题调查的答案数和正确答案?

如果这是正确的,那么你可以使用 OVER - PARTITION BY

select sq.question,
       sc.choice,
       sq.CorrectAnswer,
       sa.score,
       COUNT(*) OVER (PARTITION BY sq.SurveyId) AS TotalAnswers,
       COUNT(CASE WHEN sq.CorrectAnswer = 'RIGHT ANSWER' THEN 1 ELSE NULL END) OVER (PARTITION BY sq.SurveyId) AS CorrectAnswers
 FROM Survey s
 INNER JOIN SurveyQuestions sq ON s.surveyId = sq.SurveyId 
 INNER JOIN SurveyChoices sc ON sq.questionId=sc.questionId
 INNER JOIN SurveyAnswers sa ON sc.choiceId = sa.choiceId
 INNER JOIN tblLogin tl ON sa.username = tl.username
 WHERE tl.username = 'JohnSmith' and sq.surveyId = 12
 ORDER BY sq.questionId

一些变化来自你在答案是否正确时如何抓住的具体情况(我目前没有从你的桌面布局中看到)等等。