Optimizacion Consulta SQL

22/09/2005 - 00:44 por Bernardo© | Informe spam
Tengo un inconveneinte con una consulta pues es demasiado lenta y quisiera
optimizarla.

Tengo 3 Tablas en 2 bases de datos
dbase 1 --> dbcitas15
Tabla 1 --> cicita2005 //Citas asiganadas (cciestado=3: cumplida)
(gpscodpro= IDentificacion Medico) (gescodigo= ID Especialidad)
//Primari Key= ccinumcit
Tabla 2 --> cieatenci // Rips Digitados
//Primari Key= ccinumcit
dbase 2 --> dbgenerales
Tabla 1 --> geprosal //Profesioanles de la salud (gpscodproIDentificacion Medico, datos completos)
Tabla 2 --> geespecial //Especialidades medicas (gescodigo= ID
Especialidad, datos completos)

En la tabla CIEATENCI se guardan los registros que se les hace RIPS de los
registros de la tabla CICITA2005

Se necesita generara un inform de la cantidad de RIPS digitados agrupados
por medico y especialidad de todos los meses (1-12)
Para esto yo genero la siguiente consulta:

select
rtrim(P.gpsapepro)+' '+substring(rtrim(P.gpsnompro),1,7) as Profesional,
E.gesnombre,
SUM(case when datepart(month,C.ccifeccit)=1 then 1 else 0 end) as Ene,
SUM(case when datepart(month,C.ccifeccit)=2 then 1 else 0 end) as Feb,
SUM(case when datepart(month,C.ccifeccit)=3 then 1 else 0 end) as Mar,
SUM(case when datepart(month,C.ccifeccit)=4 then 1 else 0 end) as Abr,
SUM(case when datepart(month,C.ccifeccit)=5 then 1 else 0 end) as May,
SUM(case when datepart(month,C.ccifeccit)=6 then 1 else 0 end) as jun,
SUM(case when datepart(month,C.ccifeccit)=7 then 1 else 0 end) as Jul,
SUM(case when datepart(month,C.ccifeccit)=8 then 1 else 0 end) as Ago,
SUM(case when datepart(month,C.ccifeccit)=9 then 1 else 0 end) as Sep,
SUM(case when datepart(month,C.ccifeccit) then 1 else 0 end) as Oct,
SUM(case when datepart(month,C.ccifeccit) then 1 else 0 end) as Nov,
SUM(case when datepart(month,C.ccifeccit) then 1 else 0 end) as Dic,
SUM(case when datepart(month,C.ccifeccit) between 1 and 12 then 1 else 0
end) as TotalC
from
dbcitas17..cicita2005 C inner join dbcitas17..cieatenci R
on R.ccinumcit=C.ccinumcit and C.cciestado=3 join dbgenerales..geprosal
as P
on C.gpscodpro=P.gpscodpro join dbgenerales..geespecial as E
on C.gescodigo=E.gescodigo
group by
P.gpsnompro, P.gpsapepro, E.gesnombre
order by
P.gpsapepro, P.gpsnompro


En espera de sus comentraios

Bernardo
 

Leer las respuestas

#1 Maxi
22/09/2005 - 01:57 | Informe spam
Hola, este tipo de consultas no suelen ser optimas :( . De todas maneras
podrias usar el asistente de indices a ver si recomienda alguno ;-)


Culminis Speakers (http://latam.culminis.com)

Maxi - Buenos Aires - Argentina
Msn_messager:
mail: Maxi.da[arroba]gmail.com

"Bernardo©" escribió en el mensaje
news:%
Tengo un inconveneinte con una consulta pues es demasiado lenta y quisiera
optimizarla.

Tengo 3 Tablas en 2 bases de datos
dbase 1 --> dbcitas15
Tabla 1 --> cicita2005 //Citas asiganadas (cciestado=3: cumplida)
(gpscodpro= IDentificacion Medico) (gescodigo= ID Especialidad)
//Primari Key= ccinumcit
Tabla 2 --> cieatenci // Rips Digitados
//Primari Key= ccinumcit
dbase 2 --> dbgenerales
Tabla 1 --> geprosal //Profesioanles de la salud (gpscodpro> IDentificacion Medico, datos completos)
Tabla 2 --> geespecial //Especialidades medicas (gescodigo= ID
Especialidad, datos completos)

En la tabla CIEATENCI se guardan los registros que se les hace RIPS de
los
registros de la tabla CICITA2005

Se necesita generara un inform de la cantidad de RIPS digitados agrupados
por medico y especialidad de todos los meses (1-12)
Para esto yo genero la siguiente consulta:

select
rtrim(P.gpsapepro)+' '+substring(rtrim(P.gpsnompro),1,7) as Profesional,
E.gesnombre,
SUM(case when datepart(month,C.ccifeccit)=1 then 1 else 0 end) as Ene,
SUM(case when datepart(month,C.ccifeccit)=2 then 1 else 0 end) as Feb,
SUM(case when datepart(month,C.ccifeccit)=3 then 1 else 0 end) as Mar,
SUM(case when datepart(month,C.ccifeccit)=4 then 1 else 0 end) as Abr,
SUM(case when datepart(month,C.ccifeccit)=5 then 1 else 0 end) as May,
SUM(case when datepart(month,C.ccifeccit)=6 then 1 else 0 end) as jun,
SUM(case when datepart(month,C.ccifeccit)=7 then 1 else 0 end) as Jul,
SUM(case when datepart(month,C.ccifeccit)=8 then 1 else 0 end) as Ago,
SUM(case when datepart(month,C.ccifeccit)=9 then 1 else 0 end) as Sep,
SUM(case when datepart(month,C.ccifeccit) then 1 else 0 end) as Oct,
SUM(case when datepart(month,C.ccifeccit) then 1 else 0 end) as Nov,
SUM(case when datepart(month,C.ccifeccit) then 1 else 0 end) as Dic,
SUM(case when datepart(month,C.ccifeccit) between 1 and 12 then 1 else 0
end) as TotalC
from
dbcitas17..cicita2005 C inner join dbcitas17..cieatenci R
on R.ccinumcit=C.ccinumcit and C.cciestado=3 join dbgenerales..geprosal
as P
on C.gpscodpro=P.gpscodpro join dbgenerales..geespecial as E
on C.gescodigo=E.gescodigo
group by
P.gpsnompro, P.gpsapepro, E.gesnombre
order by
P.gpsapepro, P.gpsnompro


En espera de sus comentraios

Bernardo

Preguntas similares