Я весь день пытался вычислить 50-й процентиль поля, и я думаю, что приближаюсь к нему, но я немного застрял.
Это нормальный код без 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
Если я попытаюсь выполнить это, я получаю сообщение об ошибке:
Столбец sr.price недопустим в списке выбора, поскольку не содержится ни в агрегатной функции, ни в предложении GROUP BY.
Я погуглил эту ошибку и читал о StackOverFlow, но мне еще предстоит решить эту проблему. Я попытался добавить вторую группу по, но я не понимаю, какую переменную я должен использовать, и правильно ли я это делаю !!
Как заставить код percentile_cont работать с кодом приведения в том же операторе Select ??
JOIN
в Стандарт ANSI- 92 SQL (более 20 лет назад), и его использование не рекомендуется. - person marc_s   schedule 30.10.2014