Club Delphi  
    FTP   CCD     Buscar   Trucos   Trabajo   Foros

Retroceder   Foros Club Delphi > Bases de datos > MS SQL Server
Registrarse FAQ Miembros Calendario Guía de estilo Temas de Hoy

Respuesta
 
Herramientas Buscar en Tema Desplegado
  #1  
Antiguo 26-05-2006
Avatar de droguerman
droguerman droguerman is offline
Miembro
 
Registrado: abr 2005
Ubicación: tierra
Posts: 999
Poder: 20
droguerman Va por buen camino
ayuda con UPDATE

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

Código SQL [-]
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?
__________________
self.free;

Última edición por droguerman fecha: 29-05-2006 a las 03:26:38. Razón: el sql no se ve bien,siempre sucede eso luego de la vista previa
Responder Con Cita
  #2  
Antiguo 29-05-2006
Avatar de __hector
[__hector] __hector is offline
Miembro Premium
 
Registrado: may 2003
Ubicación: Santo Domingo, Rep. Dom.
Posts: 1.075
Poder: 23
__hector Va por buen camino
Que tal algo asi:

Código SQL [-]
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
__________________
Héctor Geraldino
Software Engineer
Responder Con Cita
  #3  
Antiguo 29-05-2006
Avatar de droguerman
droguerman droguerman is offline
Miembro
 
Registrado: abr 2005
Ubicación: tierra
Posts: 999
Poder: 20
droguerman Va por buen camino
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.
__________________
self.free;
Responder Con Cita
Respuesta



Normas de Publicación
no Puedes crear nuevos temas
no Puedes responder a temas
no Puedes adjuntar archivos
no Puedes editar tus mensajes

El código vB está habilitado
Las caritas están habilitado
Código [IMG] está habilitado
Código HTML está deshabilitado
Saltar a Foro

Temas Similares
Tema Autor Foro Respuestas Último mensaje
OLD y NEW en UPDATE micayael Firebird e Interbase 3 20-10-2005 15:50:14
Error SQL - UPDATE _ SET ... Durbed Conexión con bases de datos 2 13-12-2004 18:09:05
update de un AdoQuery fmonte Varios 9 02-09-2004 06:51:04
Update con sql miguelb SQL 8 25-07-2003 16:30:30


La franja horaria es GMT +2. Ahora son las 10:49:10.


Powered by vBulletin® Version 3.6.8
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
Traducción al castellano por el equipo de moderadores del Club Delphi
Copyright 1996-2007 Club Delphi