Bom Dia!
Eu tenho um banco de dados chamado Prova com as seguintes tabelas prova e resp_aluno,
onde em prova eu tenho o gabarito ex.:
ID_Prova GABQ1 Gabq2 GABQ3
1585 A B C
e em resp_aluno eu tenho:
ID_Aluno ID_Prova RESPQ1 RESPQ2 RESPQ3
1234 1585 B B B
Estou com dificuldade em criar uma query que retorne a quantidade de erros e acertos dos alunos por prova e por questão
teria como fazer isso no SQL SERVER?
Alguém poderia me dar um Help?
Obrigada
SELECT
(SELECT CONT() FROM RESP_ALUNO WHERE RESP_ALUNO.ID_PROVA=P.ID_PROVA AND RESP_ALUNO.RESPQ1=P.GABQ1 OR RESP_ALUNO.RESPQ2=P.GABQ2 OR RESP_ALUNO.RESPQ3=P.GABQ3) AS TOTAL_ACERTOS,
(SELECT CONT() FROM RESP_ALUNO WHERE RESP_ALUNO.ID_PROVA=P.ID_PROVA AND RESP_ALUNO.RESPQ1!=P.GABQ1AND RESP_ALUNO.RESPQ2!=P.GABQ2 AND RESP_ALUNO.RESPQ3!=P.GABQ3) AS TOTAL_ERROS
FROM PROVA P INNER JOIN RESP_ALUNO A ON P.ID_PROVA=A.ID_PROVA
Fiz no celular, talvez tenha algum erro de sintaxe
1 curtida
Boa noite amiga
A resposta do amigo @Cleiton_Conceicao está muito boa, porém eu não gosto de usar subselect para formar campos pois quanto maior a tabela mais lenta a pesquisa, então fiz uma query para você escolher entre as duas.
SELECT
ID_PROVA,
ID_ALUNO,
SUM(P1 + P2 + P3) ACERTOS,
SUM((CASE WHEN P1 = 1 THEN 0 ELSE 1 END)
+ (CASE WHEN P2 = 1 THEN 0 ELSE 1 END)
+ (CASE WHEN P3 = 1 THEN 0 ELSE 1 END)) ERROS
FROM
(SELECT
PR.ID_PROVA,
RP.ID_ALUNO,
SUM(CASE WHEN PR.GABQ1 = RP.RESPQ1 THEN 1 ELSE 0 END) P1,
SUM(CASE WHEN PR.GABQ2 = RP.RESPQ2 THEN 1 ELSE 0 END) P2,
SUM(CASE WHEN PR.GABQ3 = RP.RESPQ3 THEN 1 ELSE 0 END) P3
FROM
PROVA PR
LEFT JOIN RESP_ALUNO RP ON PR.ID_PROVA = RP.ID_PROVA
GROUP BY
PR.ID_PROVA,
RP.ID_ALUNO
) AS RESULTADO
GROUP BY
ID_PROVA,
ID_ALUNO
Boa sorte
1 curtida
Muito obrigada pela ajuda