Вычислять несколько средних команд одновременно - PullRequest
0 голосов
/ 29 января 2019

Это продолжение аналогичного поста ...

У меня есть следующий набор данных, который выглядит следующим образом.Я хотел бы выбрать только тех, у кого есть «1» для переменной ESITwoToFive, а затем вычислить AVG total_ED_LOS для каждой уникальной даты.Я также хотел бы сделать то же самое для переменной ESIFourFive.

ID  CheckinDate  ESITwoToFive ESIFourFive   Total_ED_Los   
 1   Feb 7             1            0             23
 2   Feb 7             0            1             23
 3   Feb 7             1            0             28
 4   Feb 8             1            0             43
 5   Feb 8             1            0             83
 6   Feb 8             0            1             29
 7   Feb 8             0            1             32
 8   Feb 9             1            0             93
 9   Feb 9             1            0             77
 10  Feb 9             0            1             33

Мне был любезно предоставлен следующий код для использования для вычисления переменной ESITwoToFive, которая работает.

 select t.checkin_date, avg(t.total_ed_los) as [Avg LOS]
 from [Fast Track Quality Research ESI Levels] t
 where t.esitwotofive = 1
 group by t.checkin_date

Желаемый вывод:

  Checkindate             Avg LOS for ESITwoToFive  Avg LOS for ESIFourFive
  Feb 7                   24                               23
  Feb 8                   54                               30
  Feb 9                   86                               56

Ответы [ 2 ]

0 голосов
/ 29 января 2019

Условное решение, вероятно, будет самым чистым решением, но просто предложит альтернативу без условий:

select 
    t.checkin_date,
    sum(t.total_ed_los * t.esitwotofive) / sum(t.esitwotofive),
    sum(t.total_ed_los * t.esifourfive)  / sum(t.esifourfive),
from
    [Fast Track Quality Research ESI Levels] t
group by
    t.checkin_date
0 голосов
/ 29 января 2019

Попробуйте использовать условное выражение IIf ():

SELECT t.checkin_date, Avg(IIf(ESITwoToFive=1,t.total_ed_los,Null)) AS [AvgLOStwo],
Avg(IIf(ESIFourFive=1,t.total_ed_los,Null)) as [AvgLOSfour]
FROM [Fast Track Quality Research ESI Levels] t
GROUP BY t.checkin_date
...