Форум программистов, компьютерный форум, киберфорум
Microsoft Access
Войти
Регистрация
Восстановить пароль
Карта форума Темы раздела Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.80/15: Рейтинг темы: голосов - 15, средняя оценка - 4.80
0 / 0 / 0
Регистрация: 19.03.2018
Сообщений: 21
1

Запрос на выборку по возрастным группам, как?

21.11.2018, 11:40. Показов 3052. Ответов 13
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
Есть стандартная база данных пациентов. Учитываются всего 2 заболевания. Есть 2 таблицы: table1(пациенты) и table2(заболевания). В table1 в том числе поля - idPatient (пациента), agePatient (возраст пациента) и idDisease (id заболевания из связанной таблицы table2). Все пациенты условно делятся на возрастные группы - 0-9 лет, 10-19 лет и так далее. Пробую создать запрос: к-во пациентов в каждой возрастной группе по каждой болезни, что бы отображалось так:

--------------------------------------
заболевание 0-9 лет 10-19 лет
---------------------------------------
заболевание1 20 111
заболевание2 50 35

Но ничего не получается. Просьба помочь, как сделать такое.
0
Лучшие ответы (1)
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
21.11.2018, 11:40
Ответы с готовыми решениями:

Как построить запрос что бы получить срез последних цен по группам
Имеется 3 таблицы 1 Товары id ключ name наименование 2 Склады id ключ name наименование ...

Как создать запрос на выборку
Подскажите пожалуйста, как создать запрос на выборку. У меня из них "pk" это главная таблица и...

Как сделать запрос на выборку
Помогите! Надо сделать чтобы программа считала данные только за прошлый месяц. Есть код где...

Запрос на неоплативших по группам
Здравствуйте! От меня требуется написать запрос, определяющий по каждой группе количество человек,...

13
Эксперт MS Access
7397 / 4534 / 295
Регистрация: 12.08.2011
Сообщений: 14,021
21.11.2018, 13:22 2
Цитата Сообщение от iepor Посмотреть сообщение
и idDisease (id заболевания из связанной таблицы table2).
а вот это должно быть в третьей таблице, вы пытаетесь связать два разных справочника между собой, это неверный подход.
в третьей также должен быть и id пациента, также может дата обращения, id лечащего врача и т.д. и назвать её можно лечение например.
1
Эксперт MS Access
26806 / 14485 / 3192
Регистрация: 28.04.2012
Сообщений: 15,782
21.11.2018, 14:02 3
Лучший ответ Сообщение было отмечено iepor как решение

Решение

iepor, удобно применить вспомогательную таблицу интервалов, нежели расписывать в коде или иифами. смотрите перекрестный запрос КоличествоВозраст во вложении.
SQL
1
2
3
4
5
6
TRANSFORM COUNT(*)
SELECT table2.Disease, COUNT(*) AS Количество
FROM (table1 INNER JOIN table2 ON table1.idDisease = table2.idDisease) 
             INNER JOIN [INTERVAL] ON (table1.agePatient BETWEEN INTERVAL.Start AND INTERVAL.Finis)
GROUP BY table2.Disease, INTERVAL.NameInt
PIVOT INTERVAL.NameInt
Вложения
Тип файла: rar заболевание.rar (16.4 Кб, 7 просмотров)
1
Модератор
Эксперт MS Access
6012 / 2840 / 693
Регистрация: 12.06.2016
Сообщений: 7,616
21.11.2018, 14:10 4
Цитата Сообщение от alvk Посмотреть сообщение
а вот это должно быть в третьей таблице,
вы пытаетесь связать два разных справочника между собой, это неверный подход
Не обязательно.
Допустим, table1 - результат выборки из других таблиц и отражает состояние пациентов (возраст и диагноз) на определенную дату.
Тогда ответ на вопрос iepor такой:
SQL
1
2
3
4
SELECT idDisease, 
       -SUM(agePatient<10) AS A1, -SUM(agePatient BETWEEN 10 AND 19) AS A2, ......
FROM table1
GROUP BY idDisease
С названием диагноза свяжите самостоятельно.

Но деление на группы странное.
Принято так: 0-14 дети, 15-17 подростки (иначе 0-17 несовершеннолетние), 18-19, 20-39, 40-59, >=60.
0
Эксперт MS Access
7397 / 4534 / 295
Регистрация: 12.08.2011
Сообщений: 14,021
21.11.2018, 14:42 5
Цитата Сообщение от Capi Посмотреть сообщение
Допустим, table1 - результат выборки из других таблиц
но у ТС не так!
Цитата Сообщение от iepor Посмотреть сообщение
Есть 2 таблицы: table1(пациенты) и table2(заболевания).
0
0 / 0 / 0
Регистрация: 19.03.2018
Сообщений: 21
21.11.2018, 14:46  [ТС] 6
Я так и поступил - сделал отдельную таблицу для интервалов. Всем спасибо за помощь!
0
Модератор
Эксперт MS Access
11960 / 4828 / 779
Регистрация: 07.08.2010
Сообщений: 14,138
Записей в блоге: 4
21.11.2018, 14:56 7
Цитата Сообщение от mobile Посмотреть сообщение
iepor, удобно применить вспомогательную таблицу интервалов, нежели расписывать в коде или иифами. смотрите перекрестный запрос КоличествоВозраст во вложении.
SQL
1
2
3
4
5
6
TRANSFORM COUNT(*)
SELECT table2.Disease, COUNT(*) AS Количество
FROM (table1 INNER JOIN table2 ON table1.idDisease = table2.idDisease) 
             INNER JOIN [INTERVAL] ON (table1.agePatient BETWEEN INTERVAL.Start AND INTERVAL.Finis)
GROUP BY table2.Disease, INTERVAL.NameInt
PIVOT INTERVAL.NameInt
какой-то странный результат
DiseaseКоличество< 1010-1920-3940-5060-89больше 90
заболевание166     
заболевание16 6    
заболевание16  6   
заболевание16   6  
заболевание16    6 
заболевание16     6
заболевание21010     
заболевание210 10    
заболевание210  10   
заболевание210   10  
заболевание210    10 
заболевание210     10
1
Модератор
Эксперт MS Access
6012 / 2840 / 693
Регистрация: 12.06.2016
Сообщений: 7,616
21.11.2018, 15:09 8
shanemac51,

А где пациенты возраста 51-59 и 90?
0
Модератор
Эксперт MS Access
11960 / 4828 / 779
Регистрация: 07.08.2010
Сообщений: 14,138
Записей в блоге: 4
21.11.2018, 15:17 9
мой же вариант иной
SQL
1
2
3
4
5
6
7
8
9
SELECT table1.idDisease, table2.Disease, 
-SUM(table1.agePatient>=0 AND table1.agePatient<10) AS до_10, 
-SUM(table1.agePatient>=10 AND table1.agePatient<20) AS с10_20, 
-SUM(table1.agePatient>=20 AND table1.agePatient<40) AS с20_40, 
-SUM(table1.agePatient>=40 AND table1.agePatient<60) AS с40_60, 
-SUM(table1.agePatient>=60 AND table1.agePatient<90) AS с60_90, 
-SUM(table1.agePatient>=90) AS СВ_90
FROM table1 INNER JOIN table2 ON table1.idDisease = table2.idDisease
GROUP BY table1.idDisease, table2.Disease;
idDiseaseDiseaseдо_10с10_20с20_40с40_60с60_90СВ_90
1заболевание1212001
2заболевание2042400
0
0 / 0 / 0
Регистрация: 19.03.2018
Сообщений: 21
21.11.2018, 15:19  [ТС] 10
Цитата Сообщение от Capi Посмотреть сообщение
shanemac51,

А где пациенты возраста 51-59 и 90?
Спасибо, но я уже решил эту проблему созданием отдельной таблицы с временными интервалами. В итоге в запросе выдается результат как на рисунке в первом посте. Спасибо всем!
0
Эксперт MS Access
26806 / 14485 / 3192
Регистрация: 28.04.2012
Сообщений: 15,782
21.11.2018, 16:21 11
Цитата Сообщение от shanemac51 Посмотреть сообщение
какой-то странный результат
Да, Вы правы, лишняя группировка. Надо так
SQL
1
2
3
4
5
6
TRANSFORM COUNT(*)
SELECT table2.Disease, COUNT(*) AS Количество
FROM (table1 INNER JOIN table2 ON table1.idDisease = table2.idDisease) 
             INNER JOIN INTERVAL ON (table1.agePatient BETWEEN INTERVAL.Start AND INTERVAL.Finis)
GROUP BY table2.Disease
PIVOT INTERVAL.NameInt;
0
Эксперт MS Access
7397 / 4534 / 295
Регистрация: 12.08.2011
Сообщений: 14,021
22.11.2018, 03:28 12
Цитата Сообщение от iepor Посмотреть сообщение
Спасибо, но я уже решил эту проблему созданием отдельной таблицы с временными интервалами.
В каком посте это показано? Лично я не увидел. Увидят ли другие читатели форума?
0
0 / 0 / 0
Регистрация: 19.03.2018
Сообщений: 21
22.11.2018, 12:23  [ТС] 13
Цитата Сообщение от alvk Посмотреть сообщение
В каком посте это показано? Лично я не увидел. Увидят ли другие читатели форума?
В моем 6 посте. Мне помогла сама идея - создание дополнительной таблицы, а не чей то конкретный подсказанный SQL запрос. Потом, у меня в первом посте написано
В table1 в том числе поля
, реально полей больше 20 и сам запрос в итоге составлен в режиме конструктора. Ну как это все здесь опубликовать?
0
Эксперт MS Access
7397 / 4534 / 295
Регистрация: 12.08.2011
Сообщений: 14,021
22.11.2018, 13:28 14
Ну если 20 полей, то конечно не стоит.
0
22.11.2018, 13:28
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
22.11.2018, 13:28
Помогаю со студенческими работами здесь

Запрос с суммированием по группам
Доброго времини суток. Детская задача( но проблемы) есть запрос ВЫБРАТЬ...

Как создать запрос на выборку SQL ?
Здравствуйте!:cry: Пожалуйста помогите решить вот такую задачку: &quot;Сформулируйте на языке SQL...

Как правильно создать запрос на выборку?
Доброго времени суток, уважаемые форумчане! Подскажите, как создать следующий запрос в базу...

Как сделать запрос на выборку чисел?
Проблема такая: создаю запрос, в условиях отбора прописываю: Like &amp; &quot;*&quot;. Все работает, но если...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
14
Ответ Создать тему
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru