Вы можете сделать это следующим образом, используя ROWS МЕЖДУ НЕПРЕДУСМОТРЕННЫМ ИЛИ ТЕКУЩИМ :
select t.codigo, t.nome, t.total,
SUM(t.total) OVER(ORDER BY t.codigo ROWS BETWEEN UNBOUNDED PRECEDING AND CURRENT ROW) RunningTotal
from( select codigo, nome, SUM(CASE When ANO = 2018 Then VLCOMPRA Else 0 End ) as total from clientes left join ACUMTERC on ACUMTERC.TPTERC = 2 and TPOPER = 2 AND ACUMTERC.TERCEIRO = CLIENTES.CODIGO group by codigo, nome) as t
ORDER BY total DESC
Пример с данными:
with tbl as
(
select '000001' as codigo , 'name1' as nome, 300 as total, 300 as Running_total
union select '000003' , 'name3' , 200 , 200
union select '000002' , 'name2' , 100 , 100
)
select t.codigo, t.nome, t.total,
SUM(t.total) OVER(ORDER BY t.codigo asc ROWS BETWEEN UNBOUNDED PRECEDING AND CURRENT ROW) RunningTotal
from tbl as t
ORDER BY codigo asc
with tbl as
(
select '000001' as codigo , 'name1' as nome, 300 as total, 300 as Running_total
union select '000003' , 'name3' , 200 , 200
union select '000002' , 'name2' , 100 , 100
)
select t.codigo, t.nome, t.total,
SUM(t.total) OVER(ORDER BY t.codigo asc ROWS BETWEEN UNBOUNDED PRECEDING AND CURRENT ROW) RunningTotal
from tbl as t
ORDER BY codigo asc
Вывод:
codigo nome total RunningTotal
000001 name1 300 300
000002 name2 100 400
000003 name3 200 600