Sqlserver
 sql >> Base de données >  >> RDS >> Sqlserver

Requête T-SQL à réponse à choix multiples

Pour chaque question listez les réponses attendues et les réponses soumises (vous avez besoin d'un FULL OUTER JOIN pour ce faire, un LEFT join ne suffit pas) et comptez le nombre de correspondances. Comparez ensuite ce nombre avec le nombre de réponses attendues.

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

Vous pouvez trouver une démo en direct ici