Не знаю как в T-SQL, но в oracle можно так
1. UNION
select id, sum(summa) over (order by id rows between unbounded preceding and 1 preceding ) as Itog from [dbo].[Operations]
union all
select NULL, SUM(summa) from [dbo].[Operations]
2. Посчитать общий итог в отдельный столбец
select [id], [data], [summa],
sum([summa]) over (order by [id]
rows between unbounded preceding and 1 preceding )
as [Itog],
sum([summa]) over ( ) as [Itog1]
from [dbo].[Operations]
3. Можно посчитать подитог без аналитических функций (не знаю правда насколько поменяется производительность), а итоговую строку сформировать функцией rollup (oracle)
select d1.id, SUM(d2.summa)
from [dbo].[Operations] d1 left join [dbo].[Operations] d2
ON( d1.id > d2.id )
group by rollup(d1.id)
order by d1.id
хотя 3ий вариант счита сумму по подитогам, это не совсем та сумма)