Ver Mensaje Individual
  #1 (permalink)  
Antiguo 29/01/2016, 13:20
nestorbritez080
 
Fecha de Ingreso: diciembre-2014
Ubicación: Curuguaty
Mensajes: 1
Antigüedad: 9 años, 4 meses
Puntos: 0
tengo un problema en mi consulta sql potsgres quiero restringir registro duplicado

Hola a todo tengo un problema que quiero resolver con ayuda de este foro
tengo una base de dato en postgres quiero consultar servicio por grupo de analisis
CREATE TABLE servicio_cab
(
ser_id integer NOT NULL,
ser_doctor integer NOT NULL,
ser_paciente integer,
ser_fecha character varying(100) NOT NULL,
ser_estado character varying(100) NOT NULL,
CONSTRAINT pk_servicio PRIMARY KEY (ser_id ),
CONSTRAINT fk_doctor_servicio FOREIGN KEY (ser_doctor)
REFERENCES doctor (doc_id) MATCH SIMPLE
ON UPDATE CASCADE ON DELETE RESTRICT,
CONSTRAINT fk_paciente_servicio FOREIGN KEY (ser_paciente)
REFERENCES paciente (pac_id) MATCH SIMPLE
ON UPDATE CASCADE ON DELETE RESTRICT

Este es el detalle de servicio

CREATE TABLE servicio_det
(
serdet_id integer NOT NULL,
serdet_servicio integer NOT NULL,
serdet_analisis integer NOT NULL,
serdet_resultado character varying(100),
serdet_estado character varying(15),
serdet_rango character varying(100),
CONSTRAINT pk_serviciodetalle_ PRIMARY KEY (serdet_id ),
CONSTRAINT fk_serviciodetalle_cabezera FOREIGN KEY (serdet_servicio)
REFERENCES servicio_cab (ser_id) MATCH SIMPLE
ON UPDATE CASCADE ON DELETE RESTRICT
)
WITH (
OIDS=FALSE

Esta relacionado con un tipo de analisis clinico

CREATE TABLE analisis
(
ana_id integer NOT NULL,
ana_descripcion character varying(100) NOT NULL,
ana_ambos character varying(100),
ana_grupo_analisis integer NOT NULL,
CONSTRAINT pk_hemograma PRIMARY KEY (ana_id ),
CONSTRAINT fk_grupo_analisis FOREIGN KEY (ana_grupo_analisis)
REFERENCES grupo_analisis (gruana_id) MATCH SIMPLE
ON UPDATE CASCADE ON DELETE RESTRICT
)
WITH (
OIDS=FALSE
);
ALTER TABLE analisis

y este a la ves esta relacionado con un grupo de analisis

CREATE TABLE analisis
(
ana_id integer NOT NULL,
ana_descripcion character varying(100) NOT NULL,
ana_ambos character varying(100),
ana_grupo_analisis integer NOT NULL,
CONSTRAINT pk_hemograma PRIMARY KEY (ana_id ),
CONSTRAINT fk_grupo_analisis FOREIGN KEY (ana_grupo_analisis)
REFERENCES grupo_analisis (gruana_id) MATCH SIMPLE
ON UPDATE CASCADE ON DELETE RESTRICT
)
WITH (
OIDS=FALSE
);
ALTER TABLE analisis

cada servicio_cab esta relacionado con un paciente y un doctor quien solicita

CREATE TABLE doctor
(
doc_id integer NOT NULL,
doc_nombre character varying(100) NOT NULL,
doc_apellido character varying(100) NOT NULL,
doc_celular character varying(100),
CONSTRAINT pk_doctor PRIMARY KEY (doc_id )
)
WITH (
OIDS=FALSE
);
ALTER TABLE doctor
OWNER TO postgres;


CREATE TABLE paciente
(
pac_id integer NOT NULL,
pac_nombre character varying(100) NOT NULL,
pac_apellido character varying(100) NOT NULL,
pac_celular character varying(100),
CONSTRAINT pk_paciente PRIMARY KEY (pac_id )
)
WITH (
OIDS=FALSE
);
ALTER TABLE paciente
OWNER TO postgres;


Por ende la idea es imprimir en el reporte la descripcion del grupo como titulo inicial
y llenar con el detalle de acuerdo al grupo
Eje:

--------------------------Hemograma---------------------------------------
0001-DET---------0002-ANA-

--------------------------Perfil lipídico---------------------------------------
0001-DET---------0003-ANA-
0002-DET---------0004-ANA-




Esto es el comando que utilizo pero me repite el grupo por cada detalle encuentra el registro de detalle


select ser_id, gruana_id, gruana_descripcion, serdet_id, ana_id, serdet_analisis, serdet_servicio
from grupo_analisis
inner join analisis a ON a.ana_grupo_analisis=gruana_id
inner join servicio_det d ON d.serdet_analisis=a.ana_id
inner join servicio_cab s On s.ser_id=d.serdet_servicio
where s.ser_id=110