Muchas gracias Hellmuth probe con tu solucion y en la consulta funciono, pero cuando lo pongo en la funcion de la app reaal me da error de sintaxis como este:

|'Doctrine_Connection_Pgsql_Exception' with message 'SQLSTATE[42601]: Syntax||error: 7 si lo quito y lo pongo como estaba funciona pero con la deficiencia que les comentaba inicialmente, saludos y gracias |



El 07/10/2015 a las 08:46 a. m., Hellmuth Vargas escribió:
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 <http://p.id/> = pfl.idproducto) INNER JOIN public.formadeadquisicion fa ON (pfl.idforma = fa.id <http://fa.id/>)

El 7 de octubre de 2015, 9:37 a. m., Igniris<ivaldi...@xetid.cu <mailto:ivaldi...@xetid.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
    <http://p.id> = pfl.idproducto)
      INNER JOIN public.formadeadquisicion fa ON (pfl.idforma = fa.id
    <http://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


Responder a