Provádění kumulativních výpočtů v SQL

Stránky aktualizovány :
Datum vytvoření stránky :

shrnutí

Kumulativní hodnota částky v jednotkách rok-měsíc se vypočítá pomocí SQL.

Verze kontroly provozu

Podporované verze serveru SQL Server

  • 2005
  • 2008
  • 2008 R2

Zkontrolujte verzi systému SQL Server

  • 2005
  • 2008
  • 2008 R2

Testovaná verze systému Windows

  • 2008
  • 2008 R2

hmota

Obvykle se při použití databáze často vypočítává částka peněz pro zadaný rok a měsíc, ale existují i případy, kdy je částka tohoto měsíce přidána na základě údajů předchozího měsíce, jako je částka a zásoby. Kumulativní hodnoty můžete vypočítat uložené nebo programově, ale prozatím chci provést výpočet pouze v SQL.

Níže je uvedena tabulka s částkami stanovenými pro každý rok a měsíc:

Částka za rok za měsíc Kumulativní částka za rok-jednotka Kumulativní částka
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

Chcete-li aktualizovat v dávce v SQL, namísto použití "částky předchozího měsíce" jako "částky předchozího měsíce", můžete vypočítat kumulativní hodnotu připojením podmínky, že minulá částka je agregována z cílového roku a měsíce.

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

Při spuštění výše uvedeného SQL je kumulativní hodnota zadána do "Částka kumulativní".

Částka za rok za měsíc Kumulativní částka za rok-jednotka Kumulativní částka
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

Kromě toho, pokud chcete obnovit kumulativní hodnotu každý rok, můžete ji vypočítat změnou podmíněné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.年月

Při spuštění výše uvedeného SQL je kumulativní hodnota zadána do "Roční částka kumulativní".

Částka za rok za měsíc Kumulativní částka za rok-jednotka Kumulativní částka
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