Cumulatieve berekeningen uitvoeren in SQL

Pagina bijgewerkt :
Aanmaakdatum van pagina :

samenvatting

De cumulatieve waarde van het bedrag in jaar-maandeenheden wordt berekend met behulp van SQL.

Versie van de bewerkingscontrole

Ondersteunde SQL Server-versies

  • 2005
  • 2008
  • 2008 R2

Sql Server-versie controleren

  • 2005
  • 2008
  • 2008 R2

Geteste Windows-versie

  • 2008
  • 2008 R2

stof

Normaal gesproken wordt bij het gebruik van een database het geldbedrag vaak berekend voor het opgegeven jaar en de opgegeven maand, maar er zijn ook gevallen waarin het bedrag van deze maand wordt toegevoegd op basis van de gegevens van de vorige maand, zoals bedrag en inventaris. U kunt cumulatieve waarden opgeslagen of programmatisch berekenen, maar voor nu wil ik de berekening alleen in SQL uitvoeren.

Er is een tabel hieronder, met bedragen vastgesteld voor elk jaar en elke maand:

Jaar-maandbedrag Cumulatief jaar-eenheidsbedrag Cumulatief
201004 100 nul nul
201005 200 nul nul
201006 150 nul nul
201007 300 nul nul
201008 50 nul nul
201009 220 nul nul
201010 240 nul nul
201011 280 nul nul
201012 400 nul nul
201101 450 nul nul
201102 520 nul nul
201103 120 nul nul
201104 140 nul nul
201105 450 nul nul
201106 270 nul nul
201107 640 nul nul
201108 340 nul nul
201109 230 nul nul
201110 280 nul nul
201111 320 nul nul
201112 350 nul nul
201201 230 nul nul
201202 270 nul nul
201203 350 nul nul

Om in een batch in SQL bij te werken, kunt u in plaats van "het bedrag van de vorige maand" te gebruiken als "het bedrag van de vorige maand", de cumulatieve waarde berekenen door de voorwaarde te verbinden dat het eerdere bedrag wordt geaggregeerd uit het doeljaar en de maand.

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

Wanneer u de bovenstaande SQL uitvoert, wordt de cumulatieve waarde ingevoerd in "Bedrag cumulatief".

Jaar-maandbedrag Cumulatief jaar-eenheidsbedrag Cumulatief
201004 100 100 nul
201005 200 300 nul
201006 150 450 nul
201007 300 750 nul
201008 50 800 nul
201009 220 1020 nul
201010 240 1260 nul
201011 280 1540 nul
201012 400 1940 nul
201101 450 2390 nul
201102 520 2910 nul
201103 120 3030 nul
201104 140 3170 nul
201105 450 3620 nul
201106 270 3890 nul
201107 640 4530 nul
201108 340 4870 nul
201109 230 5100 nul
201110 280 5380 nul
201111 320 5700 nul
201112 350 6050 nul
201201 230 6280 nul
201202 270 6550 nul
201203 350 6900 nul

Als u de cumulatieve waarde elk jaar opnieuw wilt instellen, kunt u deze bovendien berekenen door de voorwaardelijke expressie te wijzigen.

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

Wanneer u de bovenstaande SQL uitvoert, wordt de cumulatieve waarde ingevoerd in "Jaarlijks bedrag cumulatief".

Jaar-maandbedrag Cumulatief jaar-eenheidsbedrag Cumulatief
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