Виконання кумулятивних обчислень в SQL

Сторінка оновлюється :
Дата створення сторінки :

зведення

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

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

Підтримувані версії SQL Server

  • 2005
  • 2008
  • 2008 R2

Перевірка версії SQL Server

  • 2005
  • 2008
  • 2008 R2

Перевірена версія Windows

  • 2008
  • 2008 R2

речовина

Зазвичай при використанні бази даних сума грошей часто розраховується за вказаний рік і місяць, але бувають і випадки, коли сума цього місяця додається на основі даних попереднього місяця, таких як сума і запаси. Ви можете обчислити кумулятивні значення, що зберігаються або програмно, але на даний момент я хочу зробити розрахунок тільки в 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, кумулятивне значення вводиться в "Сума кумулятивний".

Сукупна
сума року та місяця Кумулятивна сума за рік та одиницю
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