下面的查询为我提供了每个调查(问题),用户的答案和正确答案的所有已回答的问题。
我想修改它以添加每个特定调查的答案总数#,正确的答案(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
非常感谢提前
答案 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
一些变化来自你在答案是否正确时如何抓住的具体情况(我目前没有从你的桌面布局中看到)等等。