Выполнение накопительных вычислений в SQL

Страница обновлена :
Дата создания страницы :

сводка

Кумулятивное значение суммы в единицах за год-месяц рассчитывается с помощью SQL.

Версия проверки операции

Поддерживаемые версии SQL Server

  • 2005
  • 2008
  • 2008 Р2

Проверка версии SQL Server

  • 2005
  • 2008
  • 2008 Р2

Протестированная версия Windows

  • 2008
  • 2008 Р2

вещество

Обычно при использовании базы данных сумма денег часто рассчитывается за указанный год и месяц, но бывают и случаи, когда сумма этого месяца добавляется на основе данных предыдущего месяца, таких как сумма и запасы. Вы можете вычислять накопленные или программные значения, но пока я хочу делать вычисления только в SQL.

Ниже приведена таблица с суммами, установленными для каждого года и месяца:

Сумма
за год-месяц Совокупная сумма единицы за год
201004 100 недействительный недействительный
201005 200 недействительный недействительный
201006 150 недействительный недействительный
201007 300 недействительный недействительный
201008 50 недействительный недействительный
201009 220 недействительный недействительный
201010 240 недействительный недействительный
201011 280 недействительный недействительный
201012 400 недействительный недействительный
201101 450 недействительный недействительный
201102 520 недействительный недействительный
201103 120 недействительный недействительный
201104 140 недействительный недействительный
201105 450 недействительный недействительный
201106 270 недействительный недействительный
201107 640 недействительный недействительный
201108 340 недействительный недействительный
201109 230 недействительный недействительный
201110 280 недействительный недействительный
201111 320 недействительный недействительный
201112 350 недействительный недействительный
201201 230 недействительный недействительный
201202 270 недействительный недействительный
201203 350 недействительный недействительный

Чтобы обновить в пакете в SQL, вместо того, чтобы использовать «сумму предыдущего месяца» в качестве «сумму предыдущего месяца», вы можете рассчитать кумулятивное значение, приложив условие, что прошедшая сумма агрегируется от целевого года и месяца.

update 金額集計Test
  set 金額累計 = 累計
from
(
  select
    A.年月,
    sum(B.金額) as 累計
  from 金額集計Test A
  left outer join 金額集計Test B
    on B.年月 <= A.年月
  group by A.年月
) as C
where 金額集計Test.年月 = C.年月

При выполнении приведенного выше SQL накопительное значение вводится в поле "Amount Cumulative".

Сумма
за год-месяц Совокупная сумма единицы за год
201004 100 100 недействительный
201005 200 300 недействительный
201006 150 450 недействительный
201007 300 750 недействительный
201008 50 800 недействительный
201009 220 1020 недействительный
201010 240 1260 недействительный
201011 280 1540 недействительный
201012 400 1940 недействительный
201101 450 2390 недействительный
201102 520 2910 недействительный
201103 120 3030 недействительный
201104 140 3170 недействительный
201105 450 3620 недействительный
201106 270 3890 недействительный
201107 640 4530 недействительный
201108 340 4870 недействительный
201109 230 5100 недействительный
201110 280 5380 недействительный
201111 320 5700 недействительный
201112 350 6050 недействительный
201201 230 6280 недействительный
201202 270 6550 недействительный
201203 350 6900 недействительный

Кроме того, если требуется сбрасывать накопительное значение каждый год, его можно вычислить, изменив условное выражение.

update 金額集計Test
  set 年度単位金額累計 = 累計
from
(
select
  A.年月,
  sum(B.金額) as 累計
from 金額集計Test A
left outer join 金額集計Test B
  on B.年月 <= A.年月
  and B.年月 >= case
                  when cast(right(A.年月, 2) as int) >= 4 then left(A.年月, 4) + N'04'
                  else cast(cast(left(A.年月, 4) as int) - 1 as nvarchar(4)) + N'04'
                end
group by A.年月
) as C
where 金額集計Test.年月 = C.年月

При выполнении приведенного выше SQL накопительное значение вводится в поле "Годовая сумма кумулятивной".

Сумма
за год-месяц Совокупная сумма единицы за год
201004 100 100 100
201005 200 300 300
201006 150 450 450
201007 300 750 750
201008 50 800 800
201009 220 1020 1020
201010 240 1260 1260
201011 280 1540 1540
201012 400 1940 1940
201101 450 2390 2390
201102 520 2910 2910
201103 120 3030 3030
201104 140 3170 140
201105 450 3620 590
201106 270 3890 860
201107 640 4530 1500
201108 340 4870 1840
201109 230 5100 2070
201110 280 5380 2350
201111 320 5700 2670
201112 350 6050 3020
201201 230 6280 3250
201202 270 6550 3520
201203 350 6900 3870