Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / Microsoft SQL Server Новый топик    Ответить
 Нужна помощь...  [new]
Илья Н.
Guest
Есть таблицы:

Пациенты
-ФИО
.
.
.
-ДатаРождения
-КодПациента <key>

Посещения
-ДатаПосещения
-Диагноз
-КодВрача
-КодПациента
-КодПосещения <key>

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

Первую часть сделать не проблема:


SELECT Посещения.Диагноз,
COUNT(*) AS Количество,
CONVERT(money, COUNT(*))/ОбщаяСумма*100 AS Процент

FROM Посещения JOIN Пациенты ON Пациенты.КодПациента=Посещения.КодПациента,
(SELECT COUNT(*) AS ОбщаяСумма FROM Посещения) AS ОбщаяСумма

GROUP BY Посещения.Диагноз, ОбщаяСумма


А вот как туда присобачить наиболее вероятную возрастную группу? Мучаюсь уже неделю - студен я, еще очень мало знаю :(
14 дек 03, 07:58    [458902]     Ответить | Цитировать Сообщить модератору
 Re: Нужна помощь...  [new]
Tung
Member

Откуда: Архангельск
Сообщений: 539
в вашем скрипте есть ошибка, после поля диагноз идет агрегатная функция
14 дек 03, 13:56    [458974]     Ответить | Цитировать Сообщить модератору
 Re: Нужна помощь...  [new]
Tung
Member

Откуда: Архангельск
Сообщений: 539
Первая часть правильно будет выглядеть так:

Select distinct p.Диагноз, (Select count(Диагноз) from Посещения as p1 where p.Диагноз=p1.Диагноз) as Количество, Convert(float,(Select count(Диагноз) from Посещения as p1 where p.Диагноз=p1.Диагноз))/(Select count(*) from Посещения)*100 as процент from Посещения as p
14 дек 03, 14:07    [458980]     Ответить | Цитировать Сообщить модератору
 Re: Нужна помощь...  [new]
Tung
Member

Откуда: Архангельск
Сообщений: 539
Получилось, люблю я медицину, сам работал программистом и администратор БД в одной больнице,

Select distinct p.Диагноз, (Select count(Диагноз) from Посещения as p1 where p.Диагноз=p1.Диагноз) as количество, 

Convert(float,(Select count(Диагноз) from Посещения as p1 where p.Диагноз =p1.Диагноз))/(Select count(*) from Посещения)*100 as процент,
(Select avg(datediff(year,m1.ДатаРождения, getdate())) from Пациенты as m1 inner join Посещения as p2 on (m1.kod=p2.kod) and p2.Диагноз=p.Диагноз) as [средний возраст],
(Select case when (Select avg(datediff(year,m1.ДатаРождения, getdate())) from Пациенты as m1 inner join Посещения as p2 on (m1.kod=p2.kod) and p2.Диагноз=p.Диагноз) between 0 and 15 then '0-15' else ''end)+
(Select case when (Select avg(datediff(year,m1.ДатаРождения, getdate())) from Пациенты as m1 inner join Посещения as p2 on (m1.kod=p2.kod) and p2.Диагноз=p.Диагноз) between 16 and 35 then '16-35' else ''end)+
(Select case when (Select avg(datediff(year,m1.ДатаРождения, getdate())) from Пациенты as m1 inner join Посещения as p2 on (m1.kod=p2.kod) and p2.Диагноз=p.Диагноз) between 36 and 55 then '36-55' else ''end)+
(Select case when (Select avg(datediff(year,m1.ДатаРождения, getdate())) from Пациенты as m1 inner join Посещения as p2 on (m1.kod=p2.kod) and p2.Диагноз=p.Диагноз) > 65 then '56 и старше' else ''end) [возрасная группа]
from Посещения as p
inner join Пациенты as m on (p.kod=m.kod)
14 дек 03, 14:31    [458990]     Ответить | Цитировать Сообщить модератору
 Re: Нужна помощь...  [new]
Илья Н.
Guest
Спасибо, работает! Я делал все совершенно другим способом :(
15 дек 03, 08:50    [459241]     Ответить | Цитировать Сообщить модератору
Все форумы / Microsoft SQL Server Ответить