Re: Obteniendo informacion de 3 tablas en forma de columnas y no renglones. (Vista, Procedimiento Almacenado o consulta sencilla?).

From: Mario Soto Cordones - Venezuela <msotocl(at)gmail(dot)com>
To: Alvaro Herrera <alvherre(at)surnet(dot)cl>
Cc: Alejandro Romero Parra <aromero(at)etesa(dot)com(dot)mx>, pgsql-es-ayuda(at)postgresql(dot)org
Subject: Re: Obteniendo informacion de 3 tablas en forma de columnas y no renglones. (Vista, Procedimiento Almacenado o consulta sencilla?).
Date: 2005-05-25 16:29:11
Message-ID: e9b17cde05052509292d6ba598@mail.gmail.com
Views: Raw Message | Whole Thread | Download mbox | Resend email
Thread:
Lists: pgsql-es-ayuda

Yo solucione un problema similar utilizando la funcion crosstab, y eso
me soluciono el problame de una tabla traspuesta con columnad
dinamicas y por lo tando variables; te adjunto el query por si te
sirv:

select * from crosstab('select codigo, nombre, samafilial.nb_filial,
samaubi.nb_ubicacion,co_contable,
co_tecnico, descampo, valor_campo from
_vasaf_systbl_1 , samafilial , samaubi,
activos where _vasaf_systbl_1.id_estado =
''SA'' and empresa =1 and
_vasaf_systbl_1.empresa = samafilial.co_empresa and
_vasaf_systbl_1.filial = samafilial.co_filial and
_vasaf_systbl_1.empresa = activos.co_empresa and
_vasaf_systbl_1.codigo = activos.nu_activo_fijo and
_vasaf_systbl_1.empresa = samaubi.co_empresa and
_vasaf_systbl_1.filial = samaubi.co_filial and
_vasaf_systbl_1.ubicacion =5 and
_vasaf_systbl_1.ubicacion =
samaubi.co_ubicacion AND
modelo =4 And filial = 2
group by codigo, nombre, samafilial.nb_filial,
samaubi.nb_ubicacion,co_contable,
co_tecnico, descampo ,
valor_campo order by 1', 'select ''AREA M2''
union all select ''LARGO MTS.''
union all select ''TIPO DE PROPIEDAD''
union all select ''TOMO'' ')
as ( codigo varchar, nombre
varchar, nb_filial varchar, nb_ubicacion varchar,
co_contable varchar, co_tecnico
varchar, "AREA M2" varchar ,"LARGO MTS."
varchar ,"TIPO DE PROPIEDAD"
varchar ,"TOMO" varchar )

Los datos en MAYUSCULAS los obtengo dinamicamente.. sinceramente estaf
funcion me ha ayudado mucho y la utilizo mucho ya que el sistema que
disene es muy dinamico y super parametrizable.

Espero te sirva

El 25/05/05, Alvaro Herrera<alvherre(at)surnet(dot)cl> escribió:
> On Tue, May 24, 2005 at 10:13:13AM -0500, Alejandro Romero Parra wrote:
>
> Hola,
>
> > Que mecanismo se puede utilizar para traer la informacion de la
> > siguiente manera:
>
> > [tabla traspuesta cuya definicion de columnas es variable]
>
> Creo que lo que te convendria estudiar es si el modulo
> contrib/tablefunc te sirve, particularmente la funcion crosstab() que
> sirve para hacer trasposiciones de tablas.
>
> > De lo poco que he visto en postgresql esto se podria realizar con un
> > Store Procedure??, alguien ya ha implementado algo como esto?
>
> Es posible. Pero no en PL/pgSQL. Puede que en PL/Perl puedas hacerlo
> facilmente. Por otro lado, cualquiera sea el lenguaje en que lo hagas,
> vas a necesitar definir el tipo de retorno exactamente _antes_ de
> conocer los resultados de la consulta, por lo que es posible que sea
> algo dificil hacer lo que quieres.
>
> Pensandolo bien, creo que tendrias dos opciones:
>
> 1. hacer dos consultas, la primera para saber cuantas columnas tendra el
> resultado y con eso construir la segunda consulta;
>
> 2. retornar los resultados en un array.
>
> Lo segundo lo puedes hacer facilmente con PL/Perl, por ejemplo (sobre
> todo si sabes programar en Perl ... )
>
> --
> Alvaro Herrera (<alvherre[a]surnet.cl>)
> "Tiene valor aquel que admite que es un cobarde" (Fernandel)
>
> ---------------------------(fin del mensaje)---------------------------
> TIP 3: si publicas/lees desde Usenet, por favor envía "subscribe-nomail"
> a majordomo(at)postgresql(dot)org para que tus mensajes puedan llegar
> a los suscriptores de la lista
>

--
cordialmente,

Ing. Mario Soto Cordones

In response to

Responses

Browse pgsql-es-ayuda by date

  From Date Subject
Next Message Alvaro Herrera 2005-05-25 16:33:42 Re: IPV6 o Local?
Previous Message Juan Pablo Espino 2005-05-25 16:28:11 Bloquear tablas