Re: Ayuda con Concatenación

From: "usuario anonimo" <opinante(dot)anonimo(at)gmail(dot)com>
To: "Alvaro Herrera" <alvherre(at)commandprompt(dot)com>
Cc: "Postgres studio10" <postgres(at)studio10(dot)cl>, pgsql-es-ayuda(at)postgresql(dot)org
Subject: Re: Ayuda con Concatenación
Date: 2007-10-07 04:30:47
Message-ID: 91b524660710062130h13aeec36j4fb41ac37188506@mail.gmail.com
Views: Raw Message | Whole Thread | Download mbox | Resend email
Thread:
Lists: pgsql-es-ayuda

El 6/10/07, Alvaro Herrera <alvherre(at)commandprompt(dot)com> escribió:
> Postgres studio10 escribió:
>
> > producto
> > -------------------
> > 1 polera
> > 2 pantalon
> >
> > atributo
> > ------------------
> > 11 amarillo
> > 22 rojo
> > 33 azul
> >
> > atributo_producto
> > ------------------------
> > 1 11
> > 1 22
> > 1 33
> >
> > ¿Como quedaría la función para poder pasar como argumento el código
> > del producto y me retorne todos los atributos pertenecientes a él,
> > incluida su descripción?
>
> Recordando
> http://svr5.postgresql.org/pgsql-es-ayuda/2007-01/msg00931.php
> se puede hacer algo asi:
>
> CREATE OR REPLACE FUNCTION concat_comma(text, text) RETURNS text AS '
> BEGIN
> IF $1 IS NULL THEN
> RETURN $2;
> ELSIF $2 IS NULL THEN
> RETURN $1;
> ELSE
> RETURN $1 || '', '' || $2;
> END IF;
> END;
> ' called on null input LANGUAGE 'plpgsql';
>
> CREATE AGGREGATE char_comma_sum (basetype = text, sfunc = CONCAT_COMMA,
> stype = text);
>
> Luego
>
> SELECT producto.nombre || ' ' || char_comma_sum(atributo.nombre)
> FROM producto join atributo_producto using (producto_id) join
> atributo using (atributo_id)
> where producto.id = 1
> group by producto.id

En el group by debe ir producto.nombre, lo probe y me lo dijo PostgreSQL :-)

SELECT
producto.prodesc || ' ' || char_comma_sum(atributo.atrdesc)
FROM
producto
join
atributo_producto using (procod) join atributo using (atrcodigo)
group by
producto.prodesc

Yo lo haria asi:

select
producto.prodesc, char_comma_sum(atributo.atrdesc) as atributos
from
producto, atributo_producto, atributo
where
producto.procod = atributo_producto.procod and atributo.atrcodigo =
atributo_producto.atrcodigo
group by 1;

no queda concatenado pero la consulta queda mucho mas simple y la
concatenación puede ser hecha por su aplicacion... (en realidad nunca
ubiera llegado a la consulta de Alvaro, por eso la probé)

Saludos.-

>
> --
> Alvaro Herrera http://www.CommandPrompt.com/
> The PostgreSQL Company - Command Prompt, Inc.
> --
> TIP 9: visita nuestro canal de IRC #postgresql-es en irc.freenode.net
>

--
_________________________________
Solo soy una mente genial en un cuerpo

In response to

Browse pgsql-es-ayuda by date

  From Date Subject
Next Message Gabriel Hermes Colina Zambra 2007-10-07 17:01:06 Re: Re[2]: Mi primera funcion en POSTGRESQL
Previous Message Alvaro Herrera 2007-10-07 03:54:38 Re: Ayuda con Concatenación