powered by simpleCommunicator - 2.0.59     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Microsoft SQL Server [игнор отключен] [закрыт для гостей] / Сумма с накоплением
7 сообщений из 7, страница 1 из 1
Сумма с накоплением
    #32006797
Sergy
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Может кто писал алгоритм на T-SQL такой штуки: нужно реализовать сумму с накоплением в таблице, т.е. расчитать сумму в поле P1 таким образом, чтобы значение поля P1 было равно сумме предыдущих значний по полю P.
...
Рейтинг: 0 / 0
Сумма с накоплением
    #32006803
zamm
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Тупой медленный запрос
, но других нет


select t1.id,t1.p,sum(t2.p) as sum_p
from SomeTable t1, SomeTable t2
where t2.id <= t1.id

Он же, только записан более понятно

select t1.id,t1.p,
( select sum(t2.p) from SomeTable t2 where t2.id<=t1.id ) as sum_p
from SomeTable t1
...
Рейтинг: 0 / 0
Сумма с накоплением
    #32006805
Фотография SergSuper
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
declare @t table( date int, s int)

insert @t select 1,1
insert @t select 1,2
insert @t select 2,4
insert @t select 2,5
insert @t select 3,1


declare @d table (date int)
insert @d select distinct date from @t

select d.date, sum(s)
from @d d, @t t
where t.date<=d.date
group by d.date

В отличии от примера zamm здесь позволяются повторения дат, хотя суть одна
...
Рейтинг: 0 / 0
Сумма с накоплением
    #32006806
Glory
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Приблизительно так

create table #table1 (id int identity, inv_period char(7), summa decimal(10,2))

insert into #table1 values('2001/01', 10)
insert into #table1 values('2001/02', 15)
insert into #table1 values('2001/03', 7)
insert into #table1 values('2001/04', 20)
insert into #table1 values('2001/05', 10)

select a.inv_period, max(a.summa) as summa1, sum(coalesce(b.summa, 0)) as summa2
from #table1 a
left outer join #table1 b on b.inv_period < a.inv_period
group by a.inv_period

drop table #table1
...
Рейтинг: 0 / 0
Сумма с накоплением
    #32006807
Sergy
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Всем огромное спасибо
...
Рейтинг: 0 / 0
Сумма с накоплением
    #32007002
sahon
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
по скорости выполнения:
1. приведенный выше способ самый медленный
2. с использованием курсоров
3. с использованием Update смотрите синтаксис Update - возможно сохранение промежуточных результатов в переменной (не знаю как в 7 но в 2000 такое есть)
...
Рейтинг: 0 / 0
Сумма с накоплением
    #32007006
Fompro
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
2sahon
п.3 В 6.0 уже было (за 4.21 не поручусь)
...
Рейтинг: 0 / 0
7 сообщений из 7, страница 1 из 1
Форумы / Microsoft SQL Server [игнор отключен] [закрыт для гостей] / Сумма с накоплением
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]