NO! Los siento, no es lo que quiero, en otra respuesta a este post me explico mejor (creo!)

I.N.T. - Programación escribió:
Perfecto, ni se me había ocurrido...

Gracias

Javier Chávez B. escribió:
On Thu, Jan 29, 2009 at 4:35 PM, "I.N.T. - Programación"
<dpto.programac...@grupo-int.com> wrote:
Buenas tardes,

Tengo las 3 tablas:

CREATE TABLE socios
(
 id_socio integer NOT NULL DEFAULT nextval('"socios_seq"'::text),
 nombre character varying(250),
 dni character varying(250),
 etc...

CREATE TABLE tarjetas_socios
(
 id_tarjeta integer NOT NULL DEFAULT 0,
 id_socio integer NOT NULL DEFAULT 0
)

CREATE TABLE tarjetas
(
 id_tarjeta integer NOT NULL DEFAULT nextval('"tarjetas_seq"'::text),
 id_tienda integer DEFAULT 0,
 etc...

Y tengo la siguiente consulta:

CREATE OR REPLACE VIEW view_socios AS
SELECT socios.nombre, socios.dni, 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;

Al ejecutar la vista muestra algo como:

nombre         dni                 id_tienda
-------------------------------------
LUIS            123456         15
LUIS            123456         11
LUIS            123456         47
ANDRES     987654         12
ANDRES     987654         15
MIGUEL      555555         7

etc...

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. ¿No existe una consulta en PostgreSQL del tipo ...

CREATE OR REPLACE VIEW view_socios AS
SELECT socios.nombre, socios.dni, 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, first(tarjetas.id_tienda);

... (como en access, ¡¡¡lo siento!!!)? ¿Y de alguna otra forma?

Gracias de antemano por vuestra ayuda

--
TIP 4: No hagas 'kill -9' a postmaster


Probaste con un Max ???

algo asi :

SELECT   socios.nombre,
                socios.dni,
                Max(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;

Puede ser???

Slds.

J


--
TIP 3: Si encontraste la respuesta a tu problema, publícala, otros te lo agradecerán


--
TIP 4: No hagas 'kill -9' a postmaster

Responder a