Club Delphi  
    FTP   CCD     Buscar   Trucos   Trabajo   Foros

Retroceder   Foros Club Delphi > Principal > SQL
Registrarse FAQ Miembros Calendario Guía de estilo Temas de Hoy

Respuesta
 
Herramientas Buscar en Tema Desplegado
  #1  
Antiguo 27-04-2010
sizne sizne is offline
Miembro
 
Registrado: mar 2010
Posts: 104
Poder: 15
sizne Va por buen camino
como mejorar esta consulta...

Hola...
Les planteo por fa...ayuda...
Estoy trabajando con Tablas de SQL y Delphi.
Código SQL [-]
Select i.IdE,i.CiE,i.NomE,i.ApePE,i.ApeME,i.SexoE,i.FinscripcionE,i.CarreraE,i.DeptoE,
i.CalleE,sum(TotalRecibido) as Monto
From BDinscripcion i INNER JOIN BDbeca b ON i.IdE=b.IdE
Where i.EstadoE='Inactivo'
Group by i.IdE,CiE,NomE,ApePE,ApeME,SexoE,FinscripcionE,CarreraE,DeptoE,CalleE
Order By i.IdE, i.NomE

Por favor ayuda....

Esta es mi consulta como ven, preciso varios datos...y una suma de otro Tabla (Monto) este dato es muy importante.
Estoy extrayendo todos estos datos para que se me visualicen todos en un DBGrid, lo malo como se daran cuenta se hace re lenta... Sino coloco en grupos, pues no se me muestra....y no sé como hacerla para que no sea leeeeeeeenta

Y esta otra....muy lenta...Que es para otro Formulario:
Código SQL [-]
Select i.IdM,i.CiE,i.NomE,i.ApePE,i.ApeME,i.SexoE,i.EstadoE,i.FinscripcionE,i.CarreraE,
i.DeptoE,i.CalleE,sum(TotalRecibido) as Monto,p.MontoTD
From BDinscripcion i INNER JOIN BDbeca b ON i.IdE=b.IdE INNER JOIN BDPlanDevolucion p ON i.IdE=p.IdE
Group by i.IdM,CiE,NomE,ApePE,ApeME,SexoE,FinscripcionE,CarreraE,DeptoE,CalleE,EstadoE,MontoTD
Order By i.IdM, i.NomE
Como veran es muy similar a la otra, solo que agrego otra tabla BDPlanDevolucion y de esta obtengo MontoTD (MontoTotalDevolver), q tb es dato importante para realizar otras operaciones... los demas solo preciso para visualizar en otro DBGrid.

Alguna sugerencia?

Gracias!

Última edición por sizne fecha: 27-04-2010 a las 23:18:57. Razón: Aunque podria eliminar algunos campos, pero sigue siendo leeeenta
Responder Con Cita
  #2  
Antiguo 28-04-2010
manuc manuc is offline
Miembro
 
Registrado: abr 2010
Posts: 165
Poder: 15
manuc Va por buen camino
Hola sizne,

Lo primero que tendrías que hacer es revisar los índices de las tablas, que están bien creados y sobre todo aquellos que cumplen función de inter-relación entre tablas.

También puedes plantear la consulta de este modo:

Código SQL [-]
Select i.IdM,i.CiE,i.NomE,i.ApePE,i.ApeME,i.SexoE,i.EstadoE,i.FinscripcionE,i.CarreraE,
i.DeptoE,i.CalleE,
/*consultamos en las tablas relacionadas*/
(SELECT SUM(TotalRecibido) FROM BDbeca B WHERE B.IDE=I.IDE) as Monto,
(SELECT MontoTD FROM BDPlanDevolucion P WHERE P.IDE = I.IDE) AS MontoTD
From BDinscripcion i 
Order By i.IdM, i.NomE

Pero en ambos casos, has de tener presente que los índices en tablas hacen un papel muy importante en estas consultas, sobre todo si el nº de registros en las tablas es elevado.

Esperando que ayude,

Un saludo.
Responder Con Cita
  #3  
Antiguo 28-04-2010
sizne sizne is offline
Miembro
 
Registrado: mar 2010
Posts: 104
Poder: 15
sizne Va por buen camino
Hola manuc, gracias por responder!
Te cuento que usé "vistas" de SQL SERVER 2000
Y este fue el codigo que puse para que me solucione mi programa q se estaba haciendo re lento
Código SQL [-]
SELECT     TOP 100 PERCENT i.IdE, SUM(b.TotalRecibido) AS Monto
FROM         dbo.BDinscripcion i INNER JOIN
                      dbo.BDBeca b ON i.IdE = b.IdE
WHERE     (i.EstadoE = 'Inactivo')
GROUP BY i.IdE
ORDER BY i.IdE
Lo guardé con el nombre de V_PlanDev la vista. Y en Delphi en un Query lo puse:
Código SQL [-]
SELECT *
FROM [dbo].[V_PlanDev] p, BDinscripcion q
Where p.IdE=q.IdE

Y ya no se hizo nada de lento...

Solo que me quedo una dudita, espero puedas aclararme por favor.
En el primer codigo que coloco, automaticamente aparecio o se genero esto
Cita:
TOP 100 PERCENT
Lo eliminé, pero se volvio a generar....No comprendo a que se refiere?

Graaaaaacias!

Última edición por sizne fecha: 28-04-2010 a las 20:59:36.
Responder Con Cita
  #4  
Antiguo 29-04-2010
manuc manuc is offline
Miembro
 
Registrado: abr 2010
Posts: 165
Poder: 15
manuc Va por buen camino
Hola sizne,

Esto te ocurre porque has incluido la clausula order by dentro del código de la vista.

Prueba a quitar el order by de la vista y lo añades al llamar a la vista, desde fuera de la misma.

Creo que quedaría así:

Código Delphi [-]
SELECT    i.IdE, SUM(b.TotalRecibido) AS Monto
FROM         dbo.BDinscripcion i INNER JOIN
                      dbo.BDBeca b ON i.IdE = b.IdE
WHERE     (i.EstadoE = 'Inactivo')
GROUP BY i.IdE

Código Delphi [-]
SELECT *
FROM [dbo].[V_PlanDev] p, BDinscripcion q
Where p.IdE=q.IdE
ORDER BY p.IdE
Un saludo.
Responder Con Cita
  #5  
Antiguo 30-04-2010
sizne sizne is offline
Miembro
 
Registrado: mar 2010
Posts: 104
Poder: 15
sizne Va por buen camino
Hola manuc
Tienes tooooda la razón es lo que fue...ahora ya no aparece ese codigo que se generaba automaticamente.

Graaaaaaaacias

Saludos!
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
Como puedo mejorar esta consulta... sizne SQL 7 16-04-2010 20:25:08
mejorar el tiempo de consulta kourgan C++ Builder 5 03-01-2008 11:36:22
como se hace esta consulta armando SQL 1 19-08-2004 23:07:02
como hago esta consulta armando SQL 5 01-03-2004 19:39:00
Como hago esta consulta? danytorres SQL 2 27-02-2004 13:31:51


La franja horaria es GMT +2. Ahora son las 17:52:58.


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