Формирование базы данных «Врач», «Пациент», страница 3

            WHERE (doctor.фамилия == thisform.Combo1.value)

endcase

Рис.13 Заработок врача за неделю

3)  Определить, кто из врачей заработал больше 500 т.р. (ввод любой суммы с клавиатуры) за последний месяц.

SELECT doctor.фамилия, doctor.имя, doctor.отчество, doctor.зарплата FROM doctor;

WHERE (doctor.зарплата > thisform.Text1.value)

Рис.14 Врачи заработавшие больше 36 т.р.

4)  Выдать список десяти больных с видом лечения, чья стоимость максимальна.

SET SAFETY OFF

SELECT patient.фамилия, patient.имя, patient.отчество, patient.карточка, dwork.вид_работы, dwork.стоимость FROM patient;

INNER JOIN dwork ON dwork.id_work = patient.id_work;

ORDER BY dwork.стоимость DESC;

INTO DBF tmp1

goto 11

delete rest

pack

SELECT * FROM tmp1

Рис.15 Список десяти больных с видом лечения, чья стоимость максимальна

5)  Перечислить больных с максимальной продолжительностью лечения у заданного врача (выбор).

SELECT dwork.продолжит, patient.фамилия, patient.имя, patient.отчество, patient.карточка, dwork.вид_работы, dwork.стоимость FROM  dwork;

INNER JOIN patient ON dwork.id_work = patient.id_work;

INNER JOIN doctor ON dwork.id_doctor = doctor.id_doctor;

WHERE (doctor.фамилия == thisform.Combo1.value) and dwork.продолжит = (SELECT (max(dwork.продолжит)) FROM  dwork;

INNER JOIN doctor ON doctor.id_doctor = dwork.id_doctor;

INNER JOIN patient ON patient.id_work = dwork.id_work;

WHERE (doctor.фамилия == thisform.Combo1.value))

Рис.16 Больной с максимальной продолжительностью лечения

6)  Определить больного, который посещал заданного врача (выбор) наибольшее число раз за месяц (для каждого врача и в целом для больницы).

Для врача:

SELECT count(*) as CNT_A FROM  patient;

INNER JOIN dwork ON dwork.id_work = patient.id_work;

INNER JOIN doctor ON doctor.id_doctor = dwork.id_doctor;

INNER JOIN timetable ON timetable.id_patient = patient.id_patient;

GROUP BY patient.Фамилия;

WHERE (doctor.фамилия == thisform.Combo1.value);

INTO CURSOR tmp

SELECT max(CNT_A) FROM tmp;

INTO ARRAY maxc

SELECT count(*) as "количество_посещений", patient.фамилия, patient.имя, patient.отчество, patient.карточка FROM  patient;

INNER JOIN dwork ON dwork.id_work = patient.id_work;

INNER JOIN doctor ON doctor.id_doctor = dwork.id_doctor;

INNER JOIN timetable ON timetable.id_patient = patient.id_patient;

GROUP BY patient.фамилия;

WHERE (doctor.фамилия == thisform.Combo1.value);

HAVING количество_посещений = maxc

Для больницы:

SELECT count(*) as CNT_A FROM  patient;

INNER JOIN dwork ON dwork.id_work = patient.id_work;

INNER JOIN timetable ON timetable.id_patient = patient.id_patient;

GROUP BY patient.Фамилия;

INTO CURSOR tmp

SELECT max(CNT_A) FROM tmp;

INTO ARRAY maxc

SELECT count(*) as "количество_посещений", patient.фамилия, patient.имя, patient.отчество, patient.карточка FROM  patient;

INNER JOIN dwork ON dwork.id_work = patient.id_work;

INNER JOIN timetable ON timetable.id_patient = patient.id_patient;

GROUP BY patient.фамилия;

HAVING количество_посещений = maxc

Рис.17 Больной больше всего раз посещавший больницу

7)  Перечислить заработки за месяц каждого врача в порядке возрастания, в алфавитном порядке (для врачей).

SELECT doctor.фамилия, doctor.имя, doctor.отчество, doctor.зарплата FROM doctor;

ORDER BY doctor.зарплата, doctor.фамилия

Рис.18 Заработки за месяц каждого врача в порядке возрастания, в алфавитном порядке

8)  Найти долю дешевых по стоимости видов лечения (меньше заданного N) от общего числа.

DIMENSION tmp2[1]

tmp2[1]=0

SELECT count(dwork.стоимость)*100/reccount() as Prc FROM dwork;

WHERE (dwork.стоимость < thisform.Text2.value);

INTO ARRAY tmp2

x = STR (tmp2)

MESSAGEBOX(x,0+64+0,"Доля дешевых по стоимости видов лечения от общего числа     ")