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