Ver Mensaje Individual
  #9  
Antiguo 28-07-2010
Choclito Choclito is offline
Miembro
 
Registrado: jul 2004
Posts: 169
Reputación: 20
Choclito Va por buen camino
Lightbulb gracias por la respuesta

mil disculpas no pude entrar antes, pero muchas gracias por las respuestas
,disculpas pues haciendo pruebas mande el codigo del primer SP con inner join y where.
Respecto al programa que me sugieren lo estoy buscando en la red para bajarlo y probarlo
en lo que respecta a la sugerencia del primer compañero hice las pruebas por separado y la ejecucion es casi inmediata de los select del 2do SP.
Trabajo con el ibexpert y quite todo lo que esta dentro del begin suspend y tarda como 30 seg
el SP 2 es este:
Código SQL [-]
CREATE OR ALTER PROCEDURE CONSOLIDADO (
    f1 date,
    f2 date)
returns (
    tipo_servicio varchar(30),
    monto_factura numeric(15,2),
    monto_recibo numeric(15,2),
    total numeric(15,2),
    usuario varchar(20))
as
begin
for
/*select distinct m.tipo_servicio
from listado_registro_servicios_amb (:f1,:f2,'T') m
into :tipo_servicio*/
  select distinct (l.tipo)
   from listado_servicios l
   where tipo<>'INTERNACION'
   into :tipo_servicio
do
begin
  for
  select distinct m.usuario
  from  listado_registro_servicios_amb (:f1, :f2, 'T') m
  where  (m.tipo_servicio=:tipo_servicio)
  into :usuario
  do
  begin
 select sum(m.costo)  /*  select  coalesce(sum(case when m.costo is null then 0 else m.costo end),0)  as monto_factura*/
from listado_registro_servicios_amb (:f1,:f2,'T') m
where ((M.usuario=:USUARIO)AND(m.factura='FACTURA')and(m.tipo_servicio=:tipo_servicio))
into :monto_factura;
select  coalesce(sum(case when m.costo is null then 0 else m.costo end),0) as monto_recibo
from listado_registro_servicios_amb (:f1,:f2,'T') m
where ((M.usuario=:USUARIO)AND(m.factura='RECIBO')and(m.tipo_servicio=:tipo_servicio))
into :monto_recibo;

select m.tipo_servicio,sum(m.costo)
from listado_registro_servicios_amb (:f1,:f2,'T') m
where ((m.tipo_servicio=:tipo_servicio)AND(M.usuario=:USUARIO))
group by m.tipo_servicio
into :tipo_servicio,:total;

  suspend;
  end
  end
end
y cuando lo quito la parte central queda asi : (ahi me tarda promedio 20 seg)
Código SQL [-]
CREATE OR ALTER PROCEDURE CONSOLIDADO (
    f1 date,
    f2 date)
returns (
    tipo_servicio varchar(30),
    monto_factura numeric(15,2),
    monto_recibo numeric(15,2),
    total numeric(15,2),
    usuario varchar(20))
as
begin
for
/*select distinct m.tipo_servicio
from listado_registro_servicios_amb (:f1,:f2,'T') m
into :tipo_servicio*/
  select distinct (l.tipo)
   from listado_servicios l
   where tipo<>'INTERNACION'
   into :tipo_servicio
do
begin
  for
  select distinct m.usuario
  from  listado_registro_servicios_amb (:f1, :f2, 'T') m
  where  (m.tipo_servicio=:tipo_servicio)
  into :usuario
  do
  begin
  suspend;
  end
  end
end
Y respecto a indices multiples como me suguieren como tendria que realizarlo??? en la tabla donde estan estos campos?? porfavor quisiera un poco de ayuda sobre los indices multiples
Mil gracias
Responder Con Cita