Muchas gracias a todos por sus sugerencias, me han sido de gran utilidad. 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
-----Mensaje original----- De: pgsql-es-ayuda-ow...@postgresql.org [mailto:pgsql-es-ayuda-ow...@postgresql.org] En nombre de Gerardo Herzig Enviado el: lunes, 08 de junio de 2015 13:56 Para: Esneiker Enriquez Cabrera CC: POSTGRES Asunto: Re: [pgsql-es-ayuda] optimizacion Asi como se ve....me suena a un SELECT... from ...GROUP BY unidad, tipo_servicio junto con un crosstab (para convertir filas en columnas) http://www.postgresql.org/docs/9.4/static/tablefunc.html HTH Gerardo ----- Mensaje original ----- > De: "Esneiker Enriquez Cabrera" <eenriq...@cav.desoft.cu> > Para: "POSTGRES" <pgsql-es-ayuda@postgresql.org> > Enviados: Lunes, 8 de Junio 2015 9:20:02 > Asunto: [pgsql-es-ayuda] optimizacion > > > > > 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 > - Enviado a la lista de correo pgsql-es-ayuda (pgsql-es-ayuda@postgresql.org) Para cambiar tu suscripci�n: http://www.postgresql.org/mailpref/pgsql-es-ayuda __________ Información de ESET NOD32 Antivirus, versión de la base de firmas de virus 3890 (20090226) __________ ESET NOD32 Antivirus ha comprobado este mensaje. http://www.eset.com __________ Información de ESET NOD32 Antivirus, versión de la base de firmas de virus 3890 (20090226) __________ ESET NOD32 Antivirus ha comprobado este mensaje. http://www.eset.com - Enviado a la lista de correo pgsql-es-ayuda (pgsql-es-ayuda@postgresql.org) Para cambiar tu suscripci�n: http://www.postgresql.org/mailpref/pgsql-es-ayuda