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

Responder a