SQL - CONSULTA SQL

 
Vista:
sin imagen de perfil

CONSULTA SQL

Publicado por jimena (1 intervención) el 17/11/2021 17:35:49
Hola, tengo una duda a la hora de realizar ciertas consultas.
las consultas que tengo que hacer son las siguientes:
c) Consulta: Precio por pagar por Pedro Gómez el 25/10/2021 por una radiografía. La consulta deberá comprobar si está cubierta por su seguro y en caso afirmativo aplicar el descuento correspondiente (inserta un registro en que Pedro Gómez tenga efectivamente cubierto por su seguro la radiografía)
d) Consulta: Muestra el total de pacientes que han acudido a consulta en los últimos 30 días. Llama al campo calculado recuento.
e) Consulta: Indica la fecha en que acudió el último paciente del seguro ADESLAS.
f) Consulta: Cuál es el paciente (nombre y apellidos) que ha fue atendido durante
más tiempo en una única visita
g) Consulta: Muestra los códigos postales de los pacientes que han acudido más de
20 veces a consulta en el último año
j) Consulta: Listado de los profesionales (Número de colegiado, nombre y apellidos), así como la suma de lo recaudado en las visitas del último año (coste de las visitas), sin tener en cuenta los descuentos proporcionados por los seguros.

y las tablas que tengo son las siguientes:
DROP TABLE PERSONA CASCADE CONSTRAINT;
DROP TABLE PROFESIONAL CASCADE CONSTRAINT;
DROP TABLE CONSULTA CASCADE CONSTRAINT;
DROP TABLE PACIENTE CASCADE CONSTRAINT;
DROP TABLE SEGURO CASCADE CONSTRAINT;
DROP TABLE SEGUROP CASCADE CONSTRAINT;
DROP TABLE VISITA CASCADE CONSTRAINT;

CREATE TABLE PERSONA(
NIF CHAR(9)PRIMARY KEY,
NOMBRE VARCHAR2(10),
APELLIDO VARCHAR2(30),
TFNO NUMBER(9),
TIPO VARCHAR2(13) NOT NULL);

ALTER TABLE PERSONA
ADD CONSTRAINT CK_PERSONA_TIPO
CHECK(TIPO IN ('profesional','paciente', 'ambos'));


CREATE TABLE PROFESIONAL(
NIF CHAR(9)PRIMARY KEY,
N_COLEGIACO CHAR(7),
CONSTRAINT FK_PROFESIONAL FOREIGN KEY (NIF) REFERENCES PERSONA ON DELETE CASCADE);


CREATE TABLE CONSULTA(
sala NUMBER(1),
dia VARCHAR2(1),
h_ini NUMBER(4,2) NOT NULL,
h_fin NUMBER(4,2) NOT NULL,
profesional CHAR(9),
CONSTRAINT PK_CONSULTA PRIMARY KEY (sala, dia),
CONSTRAINT FK_CONSULTA FOREIGN KEY (profesional) REFERENCES PROFESIONAL ON DELETE CASCADE,
CONSTRAINT CK_CONSULTA CHECK (h_ini <= h_fin));

ALTER TABLE CONSULTA
ADD CONSTRAINT CK_CONSULTA_dia
CHECK(dia IN ('L','M','X','J','V','S','D'));

CREATE TABLE PACIENTE(
nif CHAR(9) PRIMARY KEY,
dirección VARCHAR2(60) NOT NULL,
codPostal CHAR(5) NOT NULL,
CONSTRAINT FK_PACIENTE FOREIGN KEY (nif) REFERENCES PERSONA ON DELETE CASCADE) ;

CREATE TABLE SEGURO (
nombre VARCHAR2(20) PRIMARY KEY,
aceptado CHAR(2) NOT NULL);

ALTER TABLE SEGURO
ADD CONSTRAINT CK_SEGURO_aceptado
CHECK(aceptado IN ('Si','No'));

CREATE TABLE SEGUROP(
paciente CHAR(9),
seguro VARCHAR2(20),
CONSTRAINT PK_SEGUROP PRIMARY KEY (paciente, seguro),
CONSTRAINT FK_SEGUROP FOREIGN KEY (paciente) REFERENCES PACIENTE ON DELETE CASCADE,
CONSTRAINT FK_SEGUROP2 FOREIGN KEY (seguro) REFERENCES SEGURO);


CREATE TABLE VISITA(
sala number(1),
dia VARCHAR2(1),
h_ini NUMBER(4,2) NOT NULL,
h_fin NUMBER(4,2) NOT NULL,
fecha DATE,
paciente CHAR(9) NOT NULL,
coste NUMBER(4,2) NOT NULL,
tecnica VARCHAR2(20),
precio_f NUMBER(4,2),
pagado CHAR(2),
CONSTRAINT PK_VISITA PRIMARY KEY (fecha),
CONSTRAINT FK_VISITA FOREIGN KEY (sala, dia) REFERENCES CONSULTA ON DELETE CASCADE,
CONSTRAINT FK_VISITA2 FOREIGN KEY (paciente) REFERENCES PACIENTE);


ALTER TABLE VISITA
ADD CONSTRAINT CK_VISITA_pagago
CHECK(pagado IN ('Si','No'));

ALTER TABLE VISITA
ADD CONSTRAINT CK_VISITA_dia
CHECK(dia IN ('L','M','X','J','V','S','D'));


insert into persona values ('65004204V', 'María ','Pérez', '622125059', 'profesional');
insert into persona values ('50000556M', 'Luis ','González', '673152765', 'profesional');
insert into persona values ('00000023T', 'José ','Martín', '685423187', 'profesional');
insert into persona values ('12345678F', 'Carlos ','Fernández', '638762163', 'ambos');
insert into persona values ('87654321S', 'Álvaro',' Ruiz', '691754261', 'paciente');
insert into persona values ('05476214G', 'Mariano ','López', '687692100', 'paciente');
insert into persona values ('51782537X', 'Andrea ','del Campo', '600430478', 'paciente');
insert into persona values ('56892654J', 'Mario ','Torres', '601432498', 'paciente');
insert into persona values ('08742361M', 'Gerardo ','Sánchez', '625376859', 'paciente');
insert into persona values ('01342672D', 'Marta ','Suárez', '613465789', 'paciente');
insert into persona values ('76543961L', 'Martín', 'Rodríguez', '636621879', 'paciente');
insert into persona values ('47652134H', 'Sara', 'Jiménez', '654221376', 'ambos');
insert into persona values ('09876433P', 'Rodrigo', 'Rubio', '623471864', 'ambos');
insert into persona values ('19283746G', 'Lola', 'Aznar', '654987012', 'paciente');
insert into persona values ('09871235K', 'Inés', 'Reig', '664663662', 'paciente');
insert into persona values ('87534127N', 'Paloma', 'González', '613254986', 'profesional');
insert into persona values ('51496573B', 'Jorge', 'Albert', '623173944', 'profesional');
insert into persona values ('76542906T', 'Gonzalo', 'Domínguez', '686723001', 'profesional');


insert into profesional values ('65004204V','2811085');
insert into profesional values ('50000556M','2821903');
insert into profesional values ('00000023T','2828697');
insert into profesional values ('12345678F','2819032');
insert into profesional values ('87534127N','2834672');
insert into profesional values ('51496573B','2845633');
insert into profesional values ('76542906T','2868217');
insert into profesional values ('47652134H','2853457');
insert into profesional values ('09876433P','2828890');

insert into consulta values ('1', 'L', '13,15', '13,38', '65004204V');
insert into consulta values ('2', 'X', '10,50', '11,27', '50000556M');
insert into consulta values ('3', 'M', '09,15', '09,46', '00000023T');
insert into consulta values ('4', 'J', '17,21', '17,40', '12345678F');
insert into consulta values ('5', 'S', '15,47', '16,12', '87534127N');
insert into consulta values ('6', 'V', '16,20', '16,43', '51496573B');
insert into consulta values ('7', 'S', '12,05', '12,27', '76542906T');
insert into consulta values ('8', 'M', '13,40', '14,09', '09876433P');
insert into consulta values ('9', 'J', '11,28', '11,45', '47652134H');


insert into paciente values ('12345678F', 'Calle Serrano 240', '28006');
insert into paciente values ('87654321S', 'Calle Meteo Inurria 19', '28036');
insert into paciente values ('05476214G', 'Calle Fuencarral 36', '28004');
insert into paciente values ('51782537X', 'Calle Orense 48', '28020');
insert into paciente values ('56892654J', 'Calle Mateo García 23', '28017');
insert into paciente values ('08742361M', 'Calle del Pez 9', '28004');
insert into paciente values ('01342672D', 'Via Carpetana 56', '28047');
insert into paciente values ('76543961L', 'Calle Bravo Murillo 210', '28020');
insert into paciente values ('47652134H', 'Calle Burgos 16', '28039');
insert into paciente values ('09876433P', 'Calle Galileo 102', '28003');
insert into paciente values ('19283746G', 'Calle Cea Bermúdez 23', '28003');
insert into paciente values ('09871235K', 'Calle Jaén 5', '28020');



insert into seguro values ('Sanitas', 'Si');
insert into seguro values ('Adeslas', 'Si');
insert into seguro values ('HNA', 'No');


insert into segurop values ('87654321S', 'Sanitas');
insert into segurop values ('05476214G', 'Sanitas');
insert into segurop values ('51782537X', 'HNA');
insert into segurop values ('56892654J', 'Adeslas');
insert into segurop values ('08742361M', 'Adeslas');
insert into segurop values ('01342672D', 'HNA');
insert into segurop values ('19283746G', 'HNA');
insert into segurop values ('09876433P', 'Sanitas');
insert into segurop values ('09871235K', 'Adeslas');


insert into visita values('1', 'L', '13,15', '13,38','27/05/2020','12345678F','60,00','Traumatologia','50,00','No');
insert into visita values('2', 'X', '10,50', '11,27','04/09/2020','51782537X','90,00','Ginecologia','90,00','Si');
insert into visita values('3', 'M', '09,15', '09,46','13/03/2020','01342672D','99,00','Ginecologia','99,00','Si');
insert into visita values('4', 'J', '17,21', '17,40','02/10/2020','05476214G','87,00','Dermatologia','67,00','No');
insert into visita values('5', 'S', '15,47', '16,12','05/12/2020','56892654J','75,00','Traumatologia','68,00','Si');
insert into visita values('6', 'V', '16,20', '16,43','25/02/2020','08742361M','40,00','Oftalmologia','28,00','Si');
insert into visita values('7', 'S', '12,05', '12,27', '10/09/2020', '76543961L','75,00', 'Traumatologia', '68,00', 'Si');
insert into visita values('3', 'M', '09,15', '09,46', '14/10/2020', '76543961L', '46,00','Dermatologia', '42,00', 'Si');
insert into visita values('1', 'L', '13,15', '13,38', '2/06/2020', '09876433P', '62,00','Ginecologia', '55,00', 'No');
insert into visita values('4', 'J', '17,21', '17,40', '4/06/2020', '19283746G', '81,00','Oftalmologia', '72,00', 'Si');
insert into visita values('9', 'J', '11,28', '11,45', '18/05/2020', '09871235K', '95,00','Dermatologia', '82,00', 'No');
insert into visita values('7', 'S', '12,05', '12,27', '24/11/2020', '47652134H', '46,00','Dermatologia', '42,00', 'Si');
insert into visita values('8', 'M', '13,40', '14,09', '28/09/2020', '09876433P', '62,00','Ginecologia', '55,00', 'No');
insert into visita values('1', 'L', '13,15', '13,38', '14/11/2020', '19283746G', '81,00','Oftalmologia', '72,00', 'Si');
insert into visita values('1', 'L', '13,15', '13,38', '10/12/2020', '09871235K', '95,00','Dermatologia', '82,00', 'No');




SI ALGUIEN ME PUEDE AYUDAR SE LO AGRADEZCO :)
Valora esta pregunta
Me gusta: Está pregunta es útil y esta claraNo me gusta: Está pregunta no esta clara o no es útil
0
Responder

CONSULTA SQL

Publicado por anonimo (3 intervenciones) el 17/11/2021 19:50:55
Te colaboro con las 2 primeras:

c) Para esta hay que efectuar unos insert antes así:

insert into persona values ('77574961K', 'Pedro', 'Gómez', '626321570', 'paciente');
insert into paciente values ('77574961K', 'Calle San Juan 7', '28045');
insert into segurop values ('77574961K', 'HNA');
insert into visita values('1', 'L', '14,00', '14,15','17/10/2021','77574961K','60,00','Radiografia','20,00','Si');

SELECT V.COSTE, V.PRECIO_F, (CASE WHEN S.SEGURO IS NOT NULL THEN S.SEGURO ELSE 'Sin Seguro' END) AS "Asegurado"
FROM VISITA V
INNER JOIN PACIENTE P ON P.NIF = V.PACIENTE
LEFT JOIN SEGUROP S ON S.PACIENTE = V.PACIENTE
INNER JOIN PERSONA P ON P.NIF = V.PACIENTE
WHERE P.NOMBRE = 'Pedro' AND P.APELLIDO = 'Gómez'
AND P.TIPO = 'paciente'

Estoy asumiendo que el precio_f es el que maneja el descuento

d) Para esta el query quedaría así:

SELECT COUNT(*) AS recuento
FROM Consulta C
INNER JOIN VISITA V ON V.SALA = C.SALA AND V.DIA = C.DIA
WHERE V.FECHA = (SYSDATE-30)

Pero con los datos que hay no refleja registros y devuelve cero
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar