Sqlserver
 sql >> база данни >  >> RDS >> Sqlserver

T-SQL заявка с множество отговори

За всеки въпрос избройте очакваните отговори и изпратените отговори (имате нужда от FULL OUTER JOIN за да направите това, LEFT присъединяването не е достатъчно) и пребройте броя на съвпаденията. След това сравнете този брой с броя на очакваните отговори.

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

Можете да намерите демонстрация на живо тук



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Необходимо ли е да се капсулира един оператор за сливане (с вмъкване, изтриване и актуализиране) в транзакция?

  2. Пример за прост оператор за сливане в SQL Server

  3. Изпълнението на INNER JOIN зависи ли от реда на таблиците?

  4. Как да активирате ad hoc разпределени заявки

  5. Грешка при модифициране на DAL, System.ArgumentException, вече съществува запис със същия ключ