- •1. Библиотека
- •2. Университет
- •3. Оптовая база
- •4. Производство
- •5. Сеть магазинов
- •6. Авторемонтные мастерские
- •7. Деканат
- •8. Договорная деятельность организации
- •9. Поликлиника
- •10. Телефонная станция
- •11. Спорт
- •12. Сельскохозяйственные работы
- •13. Городской транспорт
- •14. География
- •16. Аэропорт
- •17. Персональные эвм
- •19. Зоопарк
- •20. Шахматы
- •21. Судоходство.
- •22. Научные конференции.
- •23. Программные продукты.
- •24. Операционная система
- •25. Добыча полезных ископаемых
- •26. Автотранспортное предприятие
- •28. Справочная аптек
- •30. Изучение студентами дисциплин по выбору.
9. Поликлиника
Минимальный список характеристик:
-
Номер, фамилия, имя, отчество, дата рождения пациента, социальный статус, текущее состояние;
-
ФИО, должность, квалификация и специализация лечащего врача;
-
диагноз, поставленный данным врачом данному пациенту, необходимо ли амбулаторное лечение, срок потери трудоспособности, состоит ли на диспансерном учете, дата начала лечения.
Текущее состояние - лечится, вылечился, направлен в стационар, умер. Социальный статус пациента - учащийся, работающий, временно неработающий, инвалид, пенсионер Специализация врача - терапевт, невропатолог и т.п. Квалификация врача - 1-я, 2-я, 3-я категория.
Один и тот же пациент может лечиться у нескольких врачей и один врач может лечить несколько пациентов.
Выборки:
-
Определить те случаи, когда заболевание 'язва желудка' лечилось врачом
специализации 'невропатолог'.
SELECT Врачи.ФИО, Врачи.Специализация, Диагнозы.Диагноз, Лечение.Дата_начала, Пациенты.ФИО FROM Пациенты INNER JOIN (Диагнозы INNER JOIN (Врачи INNER JOIN Лечение ON Врачи.Номер_врача = Лечение.Врач) ON Диагнозы.Номер = Лечение.Диагноз1) ON Пациенты.Номер = Лечение.Пациент WHERE (((Врачи.Специализация)="невропатолог") AND ((Диагнозы.Диагноз)="язва желудка"));
-
Вывести имена тех врачей, которые работают исключительно с пенсионерами.
Первый вариант – делаем три запроса. В первом выбираем случаи лечения не пенсионеров, группируем по врачам и социальному статусу.
SELECT Врачи.ФИО, Пациенты.Социальный_статус, Count(Лечение.Номер_записи) AS [Count-Номер_записи] FROM Пациенты INNER JOIN (Врачи INNER JOIN Лечение ON Врачи.Номер_врача = Лечение.Врач) ON Пациенты.Номер = Лечение.Пациент GROUP BY Врачи.ФИО, Пациенты.Социальный_статус HAVING (((Пациенты.Социальный_статус)<>'пенсионер'));
Во втором запросе выбираем случаи лечения пенсионеров, группировка та же, что и в предыдущем случае
SELECT Врачи.ФИО, Пациенты.Социальный_статус, Count(Лечение.Номер_записи) AS [Count-Номер_записи] FROM Пациенты INNER JOIN (Врачи INNER JOIN Лечение ON Врачи.Номер_врача = Лечение.Врач) ON Пациенты.Номер = Лечение.Пациент GROUP BY Врачи.ФИО, Пациенты.Социальный_статус HAVING (((Пациенты.Социальный_статус)='пенсионер'));
И в третьем запросе делаем левое объединение второго и первого предыдущих запросов. При этом выбираются все записи из второго (случаи лечения пенсионеров) и связанные записи из первого (те, кто лечил и пенсионеров, и остальных). Те, кто вообще не лечил пенсионеров, в выборку не попадут. Те, кто лечил только пенсионеров, попадут в выборку с нулевым (пустым) значением любого поля первого запроса (см. рисунок). Вот по этим пустым значениям мы их и выловим.
SELECT Пенс2.ФИО FROM Пенс2 LEFT JOIN Пенс1 ON Пенс2.ФИО = Пенс1.ФИО WHERE (((IsNull([Пенс1]![Count-Номер_записи]))=Yes)); Смотрим второй вариант. Пишем сразу на SQL SELECT DISTINCT Врачи.ФИО FROM Врачи WHERE (((Врачи.[номер_врача]) Not In (SELECT Лечение.Врач FROM Лечение INNER JOIN Пациенты ON Лечение.Пациент =Пациенты.Номер WHERE Пациенты.[Социальный_статус]<>"Пенсионер")));
По этому запросу мы выбираем врачей, которых нет в списке лечивших пенсионеров. Казалось бы, все просто. Но есть одно «но»… В этот список попадут и те врачи, кто вообще никого не лечил. То есть нужно дописывать условие, что они кого-либо лечили.
-
Определить процент смертности от заболевания 'кариес'.
Видимо, черный юмор или печальный опыт. Достаточно всего двух запросов. В первом считаем число заболеваний по каждому диагнозу (с группировкой)
SELECT Диагнозы.Номер, Count(Лечение.Номер_записи) AS [Count-Номер_записи] FROM Диагнозы INNER JOIN Лечение ON Диагнозы.Номер = Лечение.Диагноз1 GROUP BY Диагнозы.Номер;
Во втором будем считать процент в вычисляемом поле
SELECT Диагнозы.Диагноз, Лечение.Текущее_состояние, Count(Лечение.Номер_записи) AS [Count-Номер_записи1], [кариес1]![Count-Номер_записи] AS ОбщееЧисло, [Count-Номер_записи1]*100/[ОбщееЧисло] AS Процент FROM (Диагнозы INNER JOIN кариес1 ON Диагнозы.Номер = кариес1.Номер) INNER JOIN Лечение ON Диагнозы.Номер = Лечение.Диагноз1 WHERE (((Лечение.Текущее_состояние)="умер") AND ((Диагнозы.Диагноз)="кариес")) GROUP BY Диагнозы.Диагноз, Лечение.Текущее_состояние, [кариес1]![Count-Номер_записи];
Считаем число умерших от кариеса и с помощью первого запроса высчитываем процент.
-
Пациентов, которые болеют (болели) всеми болезнями.
SELECT DISTINCT Пациенты.ФИО FROM Пациенты INNER JOIN (Диагнозы INNER JOIN Лечение ON Диагнозы.Номер = Лечение.Диагноз1) ON Пациенты.Номер = Лечение.Пациент WHERE ((((SELECT COUNT ( Лечение.Диагноз1 ) FROM Лечение WHERE Лечение.Пациент = Пациенты.Номер ))=(SELECT COUNT ( Диагнозы.[Номер]) FROM Диагнозы )));