Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Microsoft Office и VBA программирование > Microsoft Office Access
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 03.05.2012, 15:21   #1
Uh-Oh
Пользователь
 
Регистрация: 24.09.2011
Сообщений: 12
По умолчанию Проблема с запросом

В базе 3 таблицы: Врачи, Пациенты и Обращения (вторых к первым).
Хотелось бы сделать запрос, выводящий фамилию пациента, который обращается чаще всех. Вот такой запрос:
Код:
SELECT Пациенты.Фамилия, count(Обращения.Код) AS [Количество обращений]
FROM Пациенты INNER JOIN Обращения ON Пациенты.Код = Обращения.Пациент
GROUP BY Пациенты.Фамилия
HAVING count(Обращения.Код)> ANY
(SELECT count(Обращения.Код)
FROM Пациенты INNER JOIN Обращения ON Пациенты.Код = Обращения.Пациент 
GROUP BY Пациенты.Фамилия);
выдает не одного, самого активного пациента, а всех, кто обращался больше 1 раза. Подскажите, пожалуйста, где я себя обманула?
Uh-Oh вне форума Ответить с цитированием
Старый 03.05.2012, 15:23   #2
SovereignSun
Форумчанин
 
Регистрация: 22.11.2011
Сообщений: 127
По умолчанию

where вам в помощь
SovereignSun вне форума Ответить с цитированием
Старый 03.05.2012, 15:25   #3
Uh-Oh
Пользователь
 
Регистрация: 24.09.2011
Сообщений: 12
По умолчанию

Если сделать все то же, заменяя ON на WHERE результат не меняется.
Или надо его еще где-то использовать?
Uh-Oh вне форума Ответить с цитированием
Старый 03.05.2012, 15:31   #4
SovereignSun
Форумчанин
 
Регистрация: 22.11.2011
Сообщений: 127
По умолчанию

тогда Max функцию используйте

или Limit=1 сделайте на критерий поиска
SovereignSun вне форума Ответить с цитированием
Старый 03.05.2012, 15:33   #5
SovereignSun
Форумчанин
 
Регистрация: 22.11.2011
Сообщений: 127
По умолчанию

Код:
SELECT Пациенты.Фамилия, count(Обращения.Код) AS [Количество обращений]
FROM Пациенты INNER JOIN Обращения ON Пациенты.Код = Обращения.Пациент
GROUP BY Пациенты.Фамилия
HAVING count(Обращения.Код)> ANY
(SELECT max(Обращения.Код)
FROM Пациенты INNER JOIN Обращения ON Пациенты.Код = Обращения.Пациент 
GROUP BY Пациенты.Фамилия);
SovereignSun вне форума Ответить с цитированием
Старый 03.05.2012, 15:41   #6
Uh-Oh
Пользователь
 
Регистрация: 24.09.2011
Сообщений: 12
По умолчанию

Так действительно работает, спасибо. А если бы коды обращения стояли не по порядку или вообще были случайными?
Uh-Oh вне форума Ответить с цитированием
Старый 03.05.2012, 15:49   #7
=master=
Форумчанин
 
Регистрация: 26.03.2012
Сообщений: 665
По умолчанию

Цитата:
Так действительно работает
Где ж оно раотает?
Какая субд?
=master= вне форума Ответить с цитированием
Старый 03.05.2012, 15:53   #8
papirys
 
Регистрация: 03.05.2012
Сообщений: 7
По умолчанию

Так Вы получили в подзапросе максимальное значените КОДА из таблицы Обращения и сравниваете его с числом (count(Обращения.Код)).
не бывает глупых вопросов....
papirys вне форума Ответить с цитированием
Старый 03.05.2012, 15:55   #9
Uh-Oh
Пользователь
 
Регистрация: 24.09.2011
Сообщений: 12
По умолчанию

В Access работает))) Не буду говорить, что понимаю почему.
Uh-Oh вне форума Ответить с цитированием
Старый 03.05.2012, 15:55   #10
SovereignSun
Форумчанин
 
Регистрация: 22.11.2011
Сообщений: 127
По умолчанию

Поиск ведется по колонке Обращения.Код по всей таблице, можно порядок не ставить.
SovereignSun вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Проблема с запросом! Chemik Microsoft Office Access 1 06.01.2012 15:11
проблема с запросом virtuhay266 SQL, базы данных 1 06.06.2011 21:26
Проблема с запросом StreetNBA Microsoft Office Access 3 01.06.2011 14:25
Проблема с запросом! LizaVeta Общие вопросы Delphi 3 09.05.2010 07:07
Проблема c запросом! SatS SQL, базы данных 6 24.01.2009 22:52