Personalmente haria una suerte de vista materializada. Tendrias que ver como performa si en lugar de tener una temporal le pones una funcion y un trigger a cada unidad organizativa que al actualiarse, vaya incrementando / decrementando cada Tx Haces la carga inicial con tu proceso y seguis con esto que te comento. Saludos.
El lun, 08-06-2015 a las 08:20 -0400, Esneiker Enriquez Cabrera escribió: > Saludos a todos los amigos de la comunidad. > > Les escribo porque tengo un problema y no logro encontrar una buena > forma de resolverlo. Tengo una función para obtener reportes > estadísticos donde debo retornar el nombre de las unidades > organizativas, los nombres de los tipos de servicios y los totales, de > la siguiente forma: > > Unidad > > > Tipo de > servicio > > > T1 > > > T2 > > > T3 > > > T4 > > > > > > > > > > > > > > > > > > > > > > > > El problema es que entre la tabla de unidades organizativas y tipos de > servicio no hay relación directa, sino a través de otras tablas del > negocio. Necesito tirar todas las unidades contra todos los tipos de > servicio. > > La solución que he dado hasta el momento es con un ciclo for recorrer > la tabla tipo de servicio e ir calculando los totales e irlos > insertando en una tabla temporal para al final devolver los valores, > donde evidentemente esto provoca problemas de rendimiento, el código > es el siguiente(cortado para no abrumar): > > > > for aid_elemento,adescripcion from vw_nmtipo_servicio order by > tipo_servicio loop > > SQLText = 'INSERT INTO estadistico SELECT id, nombre, > > (SELECT COUNT(distinct > vw_registro_expediente_incidencia.id) FROM > vw_registro_expediente_incidencia WHERE ...) AS t1, > > (SELECT COUNT(distinct > vw_registro_expediente_incidencia.id) FROM > vw_registro_expediente_incidencia ...) AS t2, > > (SELECT COUNT(distinct > vw_registro_expediente_incidencia.id) FROM > vw_registro_expediente_incidencia ...) AS t3, > > (SELECT COUNT(distinct > vw_registro_expediente_incidencia.id) FROM > vw_registro_expediente_incidencia ...) AS t4 > > '''|| > adescripcion_elemento||'''::character varying as criterio1 FROM > nmunidad_org WHERE (nmunidad_org.id IN ('||alista_id_nivel||'))'; > > execute SQLText; > > SQLText = ''; > > end loop; > > > > Espero que me puedan dar alguna recomendación para optimizar el > diseño. > > Saludos, > > M.Sc. Esneiker Enriquez Cabrera > Esp. B en Ciencias Informáticas > > Desoft en Ciego de Ávila. Joaquín de Aguero esq. Calle 2. Ciego de > Ávila. Cuba. > Telf.: 53 33 22 8971, email.: eenriq...@cav.desoft.cu > > > > > > > > __________ Información de ESET NOD32 Antivirus, versión de la base de > firmas de virus 11728 (20150603) __________ > > ESET NOD32 Antivirus ha comprobado este mensaje. > > http://www.eset.com