Vykonávanie kumulatívnych výpočtov v SQL

Stránka aktualizovaná :
Dátum vytvorenia strany :

súhrn

Kumulatívna hodnota sumy v jednotkách ročného mesiaca sa vypočíta pomocou SQL.

Verzia kontroly operácie

Podporované verzie SQL Servera

  • 2005
  • 2008
  • 2008 R2

Kontrola verzie SQL Servera

  • 2005
  • 2008
  • 2008 R2

Testovaná verzia systému Windows

  • 2008
  • 2008 R2

látka

Za normálnych okolností sa pri použití databázy suma peňazí často vypočíta za určený rok a mesiac, ale existujú aj prípady, keď sa suma tohto mesiaca pripočíta na základe údajov predchádzajúceho mesiaca, ako je suma a inventár. Kumulatívne hodnoty môžete vypočítať uložené alebo programovo, ale zatiaľ chcem výpočet vykonať iba v SQL.

Nižšie je uvedená tabuľka so sumami stanovenými pre každý rok a mesiac:

Kumulatívna suma kumulatívnej ročnej jednotkovej sumy
201004 100 nula nula
201005 200 nula nula
201006 150 nula nula
201007 300 nula nula
201008 50 nula nula
201009 220 nula nula
201010 240 nula nula
201011 280 nula nula
201012 400 nula nula
201101 450 nula nula
201102 520 nula nula
201103 120 nula nula
201104 140 nula nula
201105 450 nula nula
201106 270 nula nula
201107 640 nula nula
201108 340 nula nula
201109 230 nula nula
201110 280 nula nula
201111 320 nula nula
201112 350 nula nula
201201 230 nula nula
201202 270 nula nula
201203 350 nula nula

Ak chcete aktualizovať v dávke v SQL, namiesto použitia "sumy predchádzajúceho mesiaca" ako "sumy predchádzajúceho mesiaca" môžete vypočítať kumulatívnu hodnotu priložením podmienky, že minulá suma je agregovaná z cieľového roka a mesiaca.

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.年月

Keď vykonáte vyššie uvedené SQL, kumulatívna hodnota sa zadá do položky "Suma kumulatívna".

Kumulatívna suma kumulatívnej ročnej jednotkovej sumy
201004 100 100 nula
201005 200 300 nula
201006 150 450 nula
201007 300 750 nula
201008 50 800 nula
201009 220 1020 nula
201010 240 1260 nula
201011 280 1540 nula
201012 400 1940 nula
201101 450 2390 nula
201102 520 2910 nula
201103 120 3030 nula
201104 140 3170 nula
201105 450 3620 nula
201106 270 3890 nula
201107 640 4530 nula
201108 340 4870 nula
201109 230 5100 nula
201110 280 5380 nula
201111 320 5700 nula
201112 350 6050 nula
201201 230 6280 nula
201202 270 6550 nula
201203 350 6900 nula

Okrem toho, ak chcete kumulatívnu hodnotu každý rok resetovať, môžete ju vypočítať zmenou podmieneného výrazu.

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.年月

Keď vykonáte vyššie uvedené SQL, kumulatívna hodnota sa zadá do "Kumulatívna ročná suma".

Kumulatívna suma kumulatívnej ročnej jednotkovej sumy
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