Jump to content

Ayuda SQL, como generar mas rapido esta consulta


Recommended Posts

Hola les cuento estoy haciendo la practica (y me piden hacer cosas que no son mi campo xD) y me pidieron obtener algunos datos de una base de datos y pasarlos a un excel, la cosa es que son demasiadas las planillas excel que tengo que generar (aprox 1400) y cada una de esas planillas tiene como 50 consultas de este tipo:

 

SELECT avg(evaluacion) FROM (SELECT DISTINCT (curs_codigo) FROM z_profes WHERE pers_rut_profesor=  123456789)  AS A, z_profes, notasalumnos WHERE z_profes.curs_codigo = A.curs_codigo and z_profes.pren_codigo In (366,367,368,369,370) and reen_codigo<>196 and z_profes.curs_codigo=notasalumnos.curs_codigo and A.curs_codigo= notasalumnos.curs_codigo and notasalumnos.pers_rut= z_profes.pers_rut_alumno and notasalumnos.cuin_nota_final >39

 

 

y se demora mucho pero mucho en generar, habra alguna forma de acelerar el proceso?

 

 

se agradece muchisimo la ayuda

Edited by mapisco
Link to comment
Share on other sites

Bueno... como para partir... el uso de datos externos en Excel nunca fue, ni será óptimo... intenta cambiar a Excel 2007 o 2010 a ver si mejora un poco el tiempo de respuesta.

 

2º Las consultas trata de hacerlas usando INNER JOIN... y si los datos de las tablas intersectadas son muchos, usa una subconsulta como tabla intersectada en vez de la tabla completa.. Bueno... la consulta que posteaste quedaría más o menos así:

SELECT        avg(evaluacion)
FROM        (
        SELECT        DISTINCT (curs_codigo) AS curs_codigo,
                pers_rut_profesor
        FROM         z_profes 
        WHERE         pers_rut_profesor=  123456789
        )  AS A
INNER JOIN    z_profes
ON        z_profes.curs_codigo = A.curs_codigo
AND        z_profes.pren_codigo In (366,367,368,369,370)
INNER JOIN    notasalumnos
ON        z_profes.curs_codigo=notasalumnos.curs_codigo 
AND        A.curs_codigo= notasalumnos.curs_codigo 
AND        notasalumnos.pers_rut= z_profes.pers_rut_alumno 
WHERE         reen_codigo<>196 
AND         notasalumnos.cuin_nota_final >39

 

3º Si estás usando SQL Server, Oracle, MySQL crea unos procedimientos almacenados que te traigan la información... La ejecución de un procedimiento almacenado es mucho más rápida que la consulta en duro...

 

Salu2.

Link to comment
Share on other sites

dale gracias, de hecho si estoy usando excel 2007, no sera comos era comparado con excel antiguos, peor con el 2010 usando tipo de coneccion ace y todo eso me anda un pco mas lento, probare con eso.

 

 

El tema de el uso de excel, es que necesito guardar los datos en una planilla para cada profesor, sobre todos los alumnos que responden encuestas de evaluacion para ellos, y luego tengo que comprar toda la facultad asi que son millones de datos....

 

Muchas gracias :)

 

 

--- edit

 

Lo que si no me compila....

me dice qe en esta parte:

 

AND        z_profes.pren_codigo In (366,367,368,369,370)

 

falta un operador, lo junte le puse paréntesis y aun asi no funciona...

 

 

a todo esto estoy trabajando con acces, supe por ahi que acces no permitia algunas instrucciones sql es cierto eso?

Edited by mapisco
Link to comment
Share on other sites

Si es cierto...

 

Pero si estás usando access, porqué no haces unas vistas... luego haces unos formularios para obtener los datos... y en esos formularios puedes hacer que se generen los Excel más automático...

 

Obvio... no sé cómo y qué es lo que pretendes obtener, por lo tanto, es difícil ayudarte... pero como te digo... si necesitas generar varios excel a partir de una base de datos access, quizás puedas generalizar las consultas (como vistas) y le pasas parámetros a esas vistas y con los resultados generas los excel... En vez de tener la consulta en cada uno de los excel...

Link to comment
Share on other sites

Si es cierto...

 

Pero si estás usando access, porqué no haces unas vistas... luego haces unos formularios para obtener los datos... y en esos formularios puedes hacer que se generen los Excel más automático...

 

Obvio... no sé cómo y qué es lo que pretendes obtener, por lo tanto, es difícil ayudarte... pero como te digo... si necesitas generar varios excel a partir de una base de datos access, quizás puedas generalizar las consultas (como vistas) y le pasas parámetros a esas vistas y con los resultados generas los excel... En vez de tener la consulta en cada uno de los excel...

 

 

como no te entendi...

 

es que mira primero que todo tengo que generar un excel para cada profesor de la universidad guardandose como rutprofesor_nombreprofesor.xls

 

este excel tiene una plantilla predeterminada, que tengo que conservar y en las celdas de esa planilla, colocar los resultados que mencione antes, como la consulta del inicio del tema.

 

Ojala se pueda entender un poco mejor y nuevamente muchisimas gracias por tu ayuda

Link to comment
Share on other sites

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now
×
×
  • Create New...