PDA

Ver la Versión Completa : ayuda con UPDATE


droguerman
26-05-2006, 20:28:55
Hola a todos tengo dos tablas temporales dentro de un procedimiento almacenado con los siguientes campos (los nombres han sido cambiados para proteger a los inocentes)

tabla Nota
alumno
curso
nota

tabla Estadistica
curso
matriculados
notaExcelente
notaRegular
notaDesaprobatoria

estos tres ultimos campos con valor inicial cero

para evitarme cursores o hacer tres updates y el count que es bastante lento se me ocurrió usar la sgte consulta


UPDATE Estadistica
SET matriculados = matriculados+1
, notaExcelente = notaExcelente + (CASE WHEN NOTA >8 THEN 1 ELSE 0 END),
notaRegular = notaRegular + (CASE WHEN NOTA BETWEEN 6 AND 8 THEN 1 ELSE 0 END), notaDesaprobatoria = notaDesaprobatoria + (CASE WHEN NOTA < 6 THEN 1 ELSE 0 END)
FROM Nota N WHERE N.curso = Estadistica.curso


el problema es que no funciona puesto que no ejecuta el update tantas veces como registros haya en la tabla Nota sino que la ejecuta tantas veces como registros haya en la tabla Estadistica, alguien sabe como puedo modificar el UPDATE para que ejecute x cada registro de nota?

__hector
29-05-2006, 06:14:42
Que tal algo asi:


INSERT INTO Estadistica (curso, matriculados, notaExcelente, notaRegular, notaDesaprobatoria)

SELECT A.curso,
count(A.*),
(SELECT COUNT(*) FROM Nota WHERE Curso = A.curso AND Nota >8),
(SELECT COUNT(*) FROM Nota WHERE Curso = A.curso AND Nota BETWEEN 6 AND 8),
(SELECT COUNT(*) FROM Nota WHERE Curso = A.curso AND Nota < 6)

FROM Nota A
GROUP BY curso

droguerman
29-05-2006, 20:48:28
si hice asi mi consulta, pero es justo lo que quiero evitar, los counts son demasiado lentos, por eso intento un update para que lo haga de la tabla Nota, pero el problema es que si la tabla nota tiene 1000 registros, y la tabla estadistica tiene 2, el numero de ejecuciones del update es igual a 2 y no 1000, lo cual es obvio porque recorre cada registro de estadistica, mi pregunta es si alguien sabe como hacer para que el numero de ejecuciones del update sea igual al numero de registros de nota, ya que de ser asi resolveria 3 operaciones en una sola.