Вернуть абсолютное число и процент вместе - PullRequest
2 голосов
/ 09 мая 2019

Я пытаюсь рассчитать общее количество [посещений] из моей базы данных больницы, чтобы я мог использовать результат для чтения из моего скрипта Python и еженедельной рассылки нашей команде. Поэтому мне интересно, может ли кто-нибудь помочь мне с моим запросом, так как я все еще изучаю SQL.

Goal Table format:
 - Date (prefer dd/mm/yyyy)
 - Patient_Name (e.g John)
 - Patient_Id (e.g 12345)
 - Visits 
 - Professionals (Categorical Variables: Nurse, Doctor, Assistant Nurse)

Итак, я хочу получить запрос, в котором можно перечислить общее количество посещений медсестры в конкретном диапазоне дат и процент от общего числа посещений всех специалистов для конкретного пациента за неделю. Например, медсестра посещает пациента (Джон) 15 раз, а помощница медсестры - 10 раз, в то время как доктор оплачивает визиты 5 раз в неделю, поэтому мой финальный стол будет таким:

      ____________________________________________
     |____Date_____|__Prof__|__Visits_|___Percen__|
     |06/01/2018   | Nurse  |   15    |   0.5     |
     |02/11/2017   | A-Nurse|   10    |   0.33    |
     |19/04/2016   | Nurse  |    5    |   0.16    |
     |

Ниже приведен мой оператор SQL для моей SSMS, и я использовал регистр для данных Professionals, поскольку в зависимости от потребностей пациента иногда посещают терапевты вместо медсестры / врача, поэтому я хотел бы, чтобы эта часть была динамичной:

SELECT  CONVERT(VARCHAR(10), [myDate], 101), SUM([visits]) AS [Date] , [Professionals], ((SELECT [Visits] from MyHospitalTable)* 100 / (Select SUM([Visits]) From MyHospitalTable)) as Percen
FROM
(SELECT 
   Count(*) as [total],
   [Date] as [myDate],
   [Patient_id] as [myPatient_Id],
   [Patient_Name] as [myPatient_Name],
   [visits] as [visits],
   CASE
          WHEN [Professionals] LIKE '%Nurse%' THEN 'Nurse'
          WHEN [Professionals] LIKE '%Therapist%' THEN 'Therapy'
          else 'Unknown'
          END AS [Professionals]
   FROM [MyHospitalTable]
 ) a
GROUP BY [myDate]

Я понимаю, что мой запрос неверен и нуждается в улучшении, и если кто-нибудь может помочь мне с получением данных, это было бы здорово.

Заранее спасибо.

1 Ответ

0 голосов
/ 09 мая 2019

Вы можете рассчитать общий итог, используя оконную функцию, и найти процент.

Ниже дается идея, как это сделать.хотя он не совсем совместим с вашим столом.

;with ct as (
    select MyDate, sum(Visits) Visits
      , count(Visits) over (partition by MyDate order by MyDate) TotalVisits
    from HospitalTable
    group by MyDate
)
select MyDate, Visits, (Visits * 100 / TotalVisits)
from ct
...