Sqlserver
 sql >> Datenbank >  >> RDS >> Sqlserver

Multiple-Choice-Antwort T-SQL-Abfrage

Listen Sie für jede Frage die erwarteten Antworten und die eingereichten Antworten auf (Sie benötigen einen FULL OUTER JOIN dazu ein LEFT beitreten ist nicht genug) und zählen Sie die Anzahl der Übereinstimmungen. Vergleichen Sie dann diese Anzahl mit der Anzahl der erwarteten Antworten.

select question_id, case when cnt = sum_test then 1 else 0 end as mark
from (
    select question_id, count(*) cnt, sum(test) sum_test
    from (
        select coalesce(q.question_id, s.question_id) as question_id, 
        correct_option_id, 
        submitted_option_id, 
        case when correct_option_id = submitted_option_id then 1 else 0 end as test
        from question_answer q full outer join user_exam_answer s 
        on q.question_id = s.question_id and q.correct_option_id = s.submitted_option_id
        ) x
    group by question_id
) y

Eine Live-Demo finden Sie hier