From: | Hellmuth Vargas <hivs77(at)gmail(dot)com> |
---|---|
To: | Igniris <ivaldivia(at)xetid(dot)cu> |
Cc: | Lista Postgres ES <pgsql-es-ayuda(at)postgresql(dot)org>, Alvaro Herrera <alvherre(at)alvh(dot)no-ip(dot)org> |
Subject: | Re: ayuda con funcion List |
Date: | 2015-10-07 13:46:05 |
Message-ID: | CAN3Qy4ojX2yd5=JBae3UL6iCTNF77o5_g0h_SZ-j35au=uVoGA@mail.gmail.com |
Views: | Raw Message | Whole Thread | Download mbox | Resend email |
Thread: | |
Lists: | pgsql-es-ayuda pgsql-general |
Hola Igniris
Pruebalo con string_agg así:
SELECT
string_agg(distinct p.nombre,',') as prod,
string_agg(distinct fa.forma,',') as forma
FROM
public.producto p
INNER JOIN public.productoformaadquisclugar pfl ON (p.id = pfl.idproducto)
INNER JOIN public.formadeadquisicion fa ON (pfl.idforma = fa.id)
El 7 de octubre de 2015, 9:37 a. m., Igniris<ivaldivia(at)xetid(dot)cu> escribió:
> Buenos dias a todos
> tengo un problema con la funcion LIST les pongo un ejemplo para ilustralo
> mejor, tengo las siguientes tablas:
> CREATE TABLE public.producto (
> id NUMERIC NOT NULL,
> nombre TEXT,
> CONSTRAINT producto_pkey PRIMARY KEY(id)
> ) WITHOUT OIDS;
> CREATE TABLE public.formadeadquisicion (
> id NUMERIC NOT NULL,
> forma TEXT,
> CONSTRAINT formadeadquisicion_pkey PRIMARY KEY(id)
> ) WITHOUT OIDS;
> CREATE TABLE public.productoformaadquisclugar (
> idproducto NUMERIC NOT NULL,
> idforma NUMERIC NOT NULL,
> idlugar NUMERIC NOT NULL,
> CONSTRAINT productoformaadquisc_pkey PRIMARY KEY(idproducto, idforma,
> idlugar)
> ) WITHOUT OIDS;
>
> Ahora tengo una consulta para obtener los producto por su forma de
> adquisicion donde necesito los nombres de los productos y las formas
> concatenados, la consulta seria esta:
> SELECT
> LIST(p.nombre) as prod,
> LIST(fa.forma)as forma
> FROM
> public.producto p
> INNER JOIN public.productoformaadquisclugar pfl ON (p.id =
> pfl.idproducto)
> INNER JOIN public.formadeadquisicion fa ON (pfl.idforma = fa.id)
>
> el resultado de la consulta queda asi:
>
>
> ahora el problema que estoy teniendo es que los usuarios necesitan que si
> el producto se repite salga una sola vez, en este ejemplo el mango sale 2
> veces y necesito que salga solo una, la funcion list que estoy usando es
> esta:
>
> CREATE FUNCTION comma_cat(text, text) RETURNS text
> LANGUAGE sql
> AS $_$select case
> WHEN $2 is null or $2 = '' THEN $1
> WHEN $1 is null or $1 = '' THEN $2
> ELSE $1 || ', ' || $2
> END$_$;
> CREATE AGGREGATE list (
> BASETYPE = text,
> SFUNC = comma_cat,
> STYPE = text,
> INITCOND = ''
> );
>
> Muchas gracias por su ayuda, saludos
>
--
Cordialmente,
Ing. Hellmuth I. Vargas S.
Esp. Telemática y Negocios por Internet
Oracle Database 10g Administrator Certified Associate
EnterpriseDB Certified PostgreSQL 9.3 Associate
From | Date | Subject | |
---|---|---|---|
Next Message | Igniris | 2015-10-07 14:37:58 | ayuda con funcion List |
Previous Message | Hellmuth Vargas | 2015-10-06 19:17:30 | Re: [GENERAL] No funciona WITH con mas de 2 sentencias DML |
From | Date | Subject | |
---|---|---|---|
Next Message | Adrian Klaver | 2015-10-07 13:53:06 | Re: How to drop user if objects depend on it |
Previous Message | Tom Lane | 2015-10-07 13:25:25 | Re: Issues with german locale on CentOS 5,6,7 |