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