Steve Ford は、以下のこのクエリで私を助けてくれました。(ありがとう、スティーブ)。
SELECT SUM(CASE WHEN SC.IsCorrect = 1 THEN 1 ELSE 0 END) AS TotalQuestions,
COUNT(SA.AnswerID) AS TotalCorrect,
CAST(COUNT(SA.AnswerID) AS Float) /
SUM(CASE WHEN SC.IsCorrect = 1 THEN 1 ELSE 0 END) * 100 As Percentage
FROM SurveyQuestions SQ
INNER JOIN SurveyChoices SC ON SQ.QuestionId = SC.QuestionID
LEFT JOIN SurveyAnswers SA ON SA.QuestionId = SC.QuestionID
AND SA.ChoiceID = SC.ChoiceID
AND SA.UserName = 'John.Doe'
WHERE SC.IsCorrect = 1
AND SQ.SurveyID = 10
以下は彼のフィドルのデモです。
http://sqlfiddle.com/#!3/4c642/1
このクエリは、調査結果を次の形式で表示することを目的としています。
質問総数: _ 合計正解:_ 正解率_
ほとんどの場合、それは機能します。
ただし、チェックボックスはまだ正しく処理されません。
たとえば、SurveyQuestions テーブルには AnswerType というフィールド名があります。
値は、ユーザーが 1 つ以上のボックスをチェックできるチェックボックスなどの複数選択回答の Mです。Sは、ラジオ ボタンの選択肢などの単一の回答を表します。ここでは、ユーザーは 1 つの回答しか選択できません。最後に、ユーザーが好きな値を入力できる Freetext の T です。
T answerType についてはあまり気にしません。
スティーブのコードは、チェックボックスの値を正しく計算します。
IsCorrect という別のフィールドがあります。
単一の選択肢であれ、複数の選択肢であれ、正しい答えは isCorrect ビット データ型に格納された 1 の値を持ちます。
答えが正しくない場合、isCorrect の値は 0 になります。
Steve のクエリで見られる唯一の問題は、値が isCorrect = 1 の場合、それ自体が質問として扱われることです。
その結果、例えば 2 つのチェックボックスをチェックして、それらを正解としてチェックすると、Steve のコードはそれら 2 つの別々の質問を扱います。
とにかく、どれだけ多くのボックスが正解としてチェックされているかに関係なく、M の answertYpe を 1 つの問題として扱うには?
ここでのすべての支援に感謝します。