Я пытаюсь вычислить текущее общее количество по вычисленному полю в SQL Server. У меня есть две колонки, которые выглядят следующим образом:Вычислить общее количество вычисленных столбцов SQL Server
TimeElapsed | CurrentValue
0 | 0.003
1 | 0.002
2 | 0.001
Я ищу это:
TimeElapsed | CurrentValue | CummuSum
0 | 0.003 | 0.003
1 | 0.002 | 0.005
2 | 0.001 | 0.006
Чтобы получить первую таблицу, я написал следующий запрос:
select
floor(datediff(hh,date1,date2)) as TimeElapsed,
cast(count(date2) as float)/(select count(col3) from table) as CurrentValue
from
table
group by
floor(datediff(hh,date1,date2))
order by
floor(datediff(hh,date1,date2)) asc;
первый оператор вычисляет разницу во времени двух отдельных столбцов и использует функцию floor для удаления минут или секунд. Итак, если у меня есть разница в 1 час 30 минут, все, о чем я забочусь, это 1 час. Второй оператор в части выбора вычисляет процент элементов в этом диапазоне по сравнению с общим количеством элементов. Значения в Date2 могут быть NULL
.
Я думал, что abut пишет подзапрос, но когда я пытаюсь суммировать по столбцу CurrentValue
, я всегда получаю ошибку Cannot perform an aggregate function on an expression containing an aggregate or a subquery.
.
Может ли кто-нибудь обратиться за помощью, чтобы получить общее количество?
какая версия SQL-сервер вы используете? – Tanner
В SQL Server 2012+ вы можете использовать функцию окна 'SUM() OVER (ORDER BY ...) для достижения этого, но сначала вам нужно поместить ваш текущий запрос в подзапрос (так что вы не пытаетесь выполняйте агрегат по совокупности). – ZLK
@Tanner На самом деле это Azure SQL, база данных размещается в облаке. –