Re: Convertir filas en columnas o Funcion de agregado (concatenar)

From: Juanky Moral <juanky(dot)moral(at)gmail(dot)com>
To: Alberto Piña <alberto(dot)pina(at)kebir(dot)com(dot)mx>
Cc: pgsql-es-ayuda(at)postgresql(dot)org
Subject: Re: Convertir filas en columnas o Funcion de agregado (concatenar)
Date: 2005-07-07 18:29:22
Message-ID: 463a53a40507071129155c6cb8@mail.gmail.com
Views: Raw Message | Whole Thread | Download mbox | Resend email
Thread:
Lists: pgsql-es-ayuda

Muy interesante, gracias Alberto.

El 7/07/05, Alberto Piña<alberto(dot)pina(at)kebir(dot)com(dot)mx> escribió:
>
> Saludos Lista.
> Espero que esto le ayude a algunos que han tenido el mismo problema que yo.
> Estuve buscando por la red como convertir filas en columnas, aunque en
> realidad no era precisamente lo que estaba buscando. les explico mi caso.
> Supongan una tabla con esta
>
> Select * from tabla;
>
> Columna1 | Columna2
> ================
> a | v1
> a | v3
> b | v2
> b | v4
>
> Y necesitan regresar algo como esto
>
> Col1 | Col2
> =========
> a | v1,v3
> b | v2,v4
>
> La primera solucion que encontre fue hacer una funcion que segun el valor de
> columna 1 concatenara columna 2 a si misma y regresara dicho resultado, todo
> iba bien con 5 o 10 registros, el problema es que en grandes cantidades de
> registros mi query se tardaba mucho en regresar el resultado de dicha
> funcion. Se que tal vez con los indices correctos o con un buen tuning de
> mi base de datos, o tal vez con un mejor diseño de mi funcion hubiera podido
> reducir el tiempo de respuesta de mi query, pero la verdad es que lo que
> encontre estuvo mucho mas rapido y creo yo mejor implementado.
>
> Lo que encontre es una funcion de agregado que te permite a traves de un
> query como
> SELECT columna1 , list(columna2) FROM tabla GROUP BY columna1
> Obtener el resultado deseado.
>
> El codigo de la funcion y el type list es
>
> CREATE FUNCTION comma_cat (text, text) RETURNS text
> AS 'select case
> WHEN $2 is null or $2 = '''' THEN $1
> WHEN $1 is null or $1 = '''' THEN $2
> ELSE $1 || '', '' || $2
> END'
> LANGUAGE sql;
>
>
> CREATE AGGREGATE list (
> BASETYPE = text,
> SFUNC = comma_cat,
> STYPE = text,
> INITCOND = ''
> );
>
> El que dio la respuesta en el foro es Luis C. Ferreira (honor a quien honor
> merece).
> http://www.webservertalk.com/archive143-2004-1-94830.html
>
> Espero que a alguien le sirva (asi como somos muy buenos para preguntar, es
> bueno tambien a veces aportar, espero haberlo hecho).
> Saludos a todos
>
>
>
>
> Atentamente
>
> Ing. Alberto Piña Uribe
>
> Consultoría y Desarrollo
>
> KEBIR Infraestructura Tecnológica
>
>
>
> alberto(dot)pina(at)kebir(dot)com(dot)mx
>
> Cel. 044-55-59-64-85-07
>
> Tel. 55-30-22-37
>
> Fax 55-38-88-49
>

--
Juanky Moral
"Tendré que moverme más rápido: el horizonte brilla eléctrico."
(Horizonte Eléctrico - www.losdeltonos.com )

In response to

Browse pgsql-es-ayuda by date

  From Date Subject
Next Message Alvaro Herrera 2005-07-07 19:13:10 Re: Recuperar la BD en Post
Previous Message Juanky Moral 2005-07-07 18:08:06 Re: Re: mayúsculas y minúsculas en postgress