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 (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)
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 (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