"I.N.T. - Programación" escribió:

> Necesitaría que el resultado de la vista fuera algo como:
>
> nombre         dni                 id_tienda
> -------------------------------------
> LUIS            123456         15
> ANDRES     987654         12
> MIGUEL      555555         7
>
> etc...
>
> Es decir, teniendo en cuenta el agrupamiento por los 2 primeros campos y  
> CUALQUIER VALOR del tercero (el primero, el último, da igual), pero que  
> no duplique al socio.

Puedes crear una funcion de agregacion "first" que te retorne lo que
quieres.  Por ej.

create function first_int(anyelement, anyelement) returns anyelement
as $$ select coalesce($1, $2); $$ language sql;

create aggregate first(anyelement) (sfunc = first_int, stype = anyelement);

Y luego deberia funcionar:

 CREATE OR REPLACE VIEW view_socios AS
 SELECT socios.nombre, socios.dni, first(tarjetas.id_tienda)
   FROM socios, tarjetas_socios, tarjetas
  WHERE socios.id_socio = tarjetas_socios.id_socio AND  
 tarjetas_socios.id_tarjeta = tarjetas.id_tarjeta
  GROUP BY socios.nombre, socios.dni, tarjetas.id_tienda;

-- 
Alvaro Herrera                        http://www.advogato.org/person/alvherre
"El sudor es la mejor cura para un pensamiento enfermo" (Bardia)
--
TIP 7: no olvides aumentar la configuración del "free space map"

Responder a