1

次のテーブルと関連する属性があります。

Survey:
  SurveyID int,
  SurveyTitle nvarchar(50)

SurveyQuestions
 QuestionId int,
 SurveyId fk from Survey table
 Question nvarchar(100)
 QuestionOrder int (eg: 1,2,3)
AnswerType char(1) (M. for Multiple choice answers like Checkbox, S for single like radiobuttion, T for Free Text


SurveyChoices
 ChoiceId int
 QuestionId int fk from SurveyQuestions
 Choice nvarchar(255) (eg: Choices for each question entered by Admin
 IsCorrect bit (1 for Correct choice, 0 for incorrect choice.

SurveyAnswers
 AnswerId int
 ChoiceId int fk from SurveyChoices
 QuetionId int fk from SurveyQuestions
 ChoiceText nvarchar(2000) (For FreeText)

これが私の必要性です。

各アンケートの質問を表示し、ユーザーの選択、最後に正しい回答を表示したいと思います。

ユーザーは複数の選択肢の回答 (チェックボックス) を 1 つ以上チェックできます

したがって、レイアウトは次のようになります。

Question                               Your Choice                     Correct Answer(s)
How many days in a year?                 365                            365
Tom Cruise Starred in 
what movies? Check all that apply       Rain Man                        Rain Man
                                        Risky Business                  Risky Business
                                        Mission Possible                Mission Impossible

あなたは実際にフィドルでSQLスキーマを見ることができます

http://sqlfiddle.com/#!3/4c642/1

礼儀スティーブ・フォード。ありがとう、スティーブ。

私が試みたクエリは以下のとおりです。

SELECT DISTINCT SQ.question, SC.Choice As CorrectAnswer   
                          FROM surveyquestions AS SQ
                          INNER JOIN surveychoices AS SC ON SQ.QuestionID = SC.QuestionID
                          INNER JOIN surveyanswers AS SA ON SA.QuestionID = SQ.QuestionID AND SC.choiceId = SA.choiceId AND SA.username = 'John.Doe'
                          WHERE SQ.SurveyID = 10 

質問は正しいようです。

トム クルーズの映画の場合のように、複数の選択肢が正しい場合、それらすべてが表示されないため、正解は完全には正しくありません。

問題ごとにすべての正解を表示したいと考えています。

最後に、ユーザーの選択肢を表示する方法がわかりません。

専門家のご支援をよろしくお願いいたします。

ここに画像の説明を入力

4

2 に答える 2

0
SELECT Q.question, C.choice, 
  (SELECT  A1.choice FROM SurveyChoices A1 WHERE A1.choiceid = A.choiceid) AS YourChoice
FROM SurveyQuestions AS Q
left JOIN 
  (SELECT C1.questionid, C1.Choice from SurveyChoices C1 WHERE C1.iscorrect = 1) AS C
   ON Q.questionid = C.questionid
left  JOIN SurveyAnswers A ON A.questionid = Q.questionid
WHERE Q.surveyid = 10  ORDER BY Q.questionorder;

http://sqlfiddle.com/#!3/4c642/99

于 2013-08-05T15:58:53.817 に答える