Я пытаюсь вычислить 50-й процентиль поля весь день, и я думаю, что приближаюсь, но я немного застрял.SQL Server 2012 Функция «Percentile_Cont» - GROUP BY issue
Это обычный код, без percentile_cont
:
declare @st_date datetime;
declare @en_date datetime;
declare @days int;
set @en_date = (@en_datein);
set @st_date = (@st_datein);
select
srt.Name,
cast(sum(sr.price) as int) as AvgCost,
cast(sum(sr.cost) as int) as AvgTransCost,
cast(avg(sr.TotalTimeSpent) as int) as TotalTimeSpent
from
ServiceReq sr, ServiceReqTemplate srt
where
sr.SvcReqTmplLink_RecID = srt.RecId
and sr.CreatedDateTime >= @st_date
and sr.CreatedDateTime <= @en_date
group by
srt.Name
order by
1
Это мой код, когда я добавляю percentile_cont
:
declare @st_date datetime;
declare @en_date datetime;
declare @days int;
set @en_date = (@en_datein);
set @st_date = (@st_datein);
SELECT srt.Name,
percentile_cont(.5) WITHIN GROUP(ORDER BY sr.price) OVER(PARTITION BY srt.Name) AS MedianSpend,
cast(sum(sr.price) as int) as AvgCost,
cast(sum(sr.cost) as int) as AvgTransCost,
cast(avg(sr.TotalTimeSpent) as int) as TotalTimeSpent
from
ServiceReq sr, ServiceReqTemplate srt
where
sr.SvcReqTmplLink_RecID = srt.RecId
and sr.CreatedDateTime >= @st_date
and sr.CreatedDateTime <= @en_date
group by
srt.Name
order by
1
Если я пытаюсь выполнить это я получаю сообщение об ошибке:
Column sr.price is invalid in the select list because is not contained in either an aggregate function or the GROUP BY clause
Я искал эту ошибку и читал об этом в StackOver Поток, но мне еще предстоит решить эту проблему. Я попробовал добавить вторую группу By, но я смущен относительно той переменной, которую я должен использовать, или если я даже делаю это правильно!
Как заставить код percentile_cont работать с литым кодом под тем же оператором Select?
[Вредные привычки пинать: использование старого стиля JOIN и] (http://sqlblog.com/blogs/aaron_bertrand/archive/2009/10/ 08/bad-habits-to-kick-use-old-style-joins.aspx) - стиль старого стиля * разделенный запятыми список таблиц * был заменен на * правильный * ANSI 'JOIN' синтаксис в ANSI- ** 92 ** Стандарт SQL (** более 20 лет ** назад), и его использование обескуражено –
его из коробки отчет, который я настраиваю – QuestionQuestion