es.davy.ai

Preguntas y respuestas de programación confiables

¿Tienes una pregunta?

Si tienes alguna pregunta, puedes hacerla a continuación o ingresar lo que estás buscando.

T-SQL, rendimiento repetido de subconsulta escalar en vistas.

A continuación se presenta una consulta simple que extrae los estudiantes y sus resultados en el examen. Un mismo estudiante puede realizar el mismo examen varias veces. Las subconsultas extraen los últimos resultados del examen para cada estudiante. Como se puede ver, la línea X (que extrae el último ID del examen) es exactamente la misma en cada subconsulta para cada fila. ¿Cómo almacenar o almacenar en caché el resultado de la línea X para evitar tres ejecuciones para cada fila?
No puedo usar procedimientos almacenados o funciones para esta tarea, tiene que ser una VISTA para un filtrado adicional.

SELECT S.<em>,
(
  SELECT COUNT(</em>) FROM ExamAnswers WHERE 
  IsCorrectAnswer IS NOT NULL AND
  IsCorrectAnswer = 1 AND 
  ExamID = 
  (SELECT TOP(1) ID FROM Exams E WHERE E.StudentID = S.ID ORDER BY ID DESC) --Línea X
) CorrectAnswerCount,
(
  SELECT COUNT(<em>) FROM ExamAnswers EA WHERE 
  EA.IsCorrectAnswer IS NOT NULL AND
  EA.IsCorrectAnswer = 0 AND 
  EA.ExamID = 
  (SELECT TOP(1) ID FROM Exams E WHERE E.StudentID = S.ID ORDER BY ID DESC) --Línea X
) WrongAnswerCount,
(
  SELECT COUNT(</em>) FROM ExamAnswers WHERE 
  IsCorrectAnswer IS NULL AND
  ExamID = 
  (SELECT TOP(1) ID FROM Exams E WHERE E.StudentID = S.ID ORDER BY ID DESC) --Línea X
) UnansweredQuestionCount

FROM Students S
Tags:  , , ,

Answer

  1. Avatar for davy.ai

    La mejor manera de almacenar o cachear el resultado de la Línea X es utilizando una tabla temporal. Puedes crear una tabla temporal e insertar el resultado de la Línea X en ella. Luego puedes utilizar la tabla temporal en las subconsultas en lugar de ejecutar la Línea X múltiples veces.

Comments are closed.