Kumulatīvo aprēķinu veikšana SQL

Lapa atjaunota :
Lapas izveides datums :

Kopsavilkuma

Summas kumulatīvā vērtība gada mēneša vienībās tiek aprēķināta, izmantojot SQL.

Operācijas pārbaudes versija

Atbalstītās SQL Server versijas

  • 2005
  • 2008
  • 2008 R2

Pārbaudīt SQL Server versiju

  • 2005
  • 2008
  • 2008 R2

Pārbaudīta Windows versija

  • 2008
  • 2008 R2

viela

Parasti, izmantojot datu bāzi, naudas summa bieži tiek aprēķināta par norādīto gadu un mēnesi, bet ir arī gadījumi, kad šī mēneša summa tiek pievienota, pamatojoties uz iepriekšējā mēneša datiem, piemēram, summu un krājumiem. Kumulatīvās vērtības var aprēķināt saglabātās vai programmatiski, bet pagaidām es vēlos veikt aprēķinu tikai SQL.

Zemāk ir tabula ar summām, kas noteiktas katram gadam un mēnesim:

Gada-mēneša summa Kumulatīvā gada vienības summa Kumulatīvā kumulatīvā
201004 100 nulle nulle
201005 200 nulle nulle
201006 150 nulle nulle
201007 300 nulle nulle
201008 50 nulle nulle
201009 220 nulle nulle
201010 240 nulle nulle
201011 280 nulle nulle
201012 400 nulle nulle
201101 450 nulle nulle
201102 520 nulle nulle
201103 120 nulle nulle
201104 140 nulle nulle
201105 450 nulle nulle
201106 270 nulle nulle
201107 640 nulle nulle
201108 340 nulle nulle
201109 230 nulle nulle
201110 280 nulle nulle
201111 320 nulle nulle
201112 350 nulle nulle
201201 230 nulle nulle
201202 270 nulle nulle
201203 350 nulle nulle

Lai atjauninātu sql paketē, tā vietā, lai izmantotu "iepriekšējā mēneša summu" kā "iepriekšējā mēneša summu", kumulatīvo vērtību var aprēķināt, pievienojot nosacījumu, ka iepriekšējā summa tiek apkopota no mērķa gada un mēneša.

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

Izpildot iepriekš minēto SQL, kumulatīvā vērtība tiek ievadīta laukā "Kumulatīvā summa".

Gada-mēneša summa Kumulatīvā gada vienības summa Kumulatīvā kumulatīvā
201004 100 100 nulle
201005 200 300 nulle
201006 150 450 nulle
201007 300 750 nulle
201008 50 800 nulle
201009 220 1020 nulle
201010 240 1260 nulle
201011 280 1540 nulle
201012 400 1940 nulle
201101 450 2390 nulle
201102 520 2910 nulle
201103 120 3030 nulle
201104 140 3170 nulle
201105 450 3620 nulle
201106 270 3890 nulle
201107 640 4530 nulle
201108 340 4870 nulle
201109 230 5100 nulle
201110 280 5380 nulle
201111 320 5700 nulle
201112 350 6050 nulle
201201 230 6280 nulle
201202 270 6550 nulle
201203 350 6900 nulle

Turklāt, ja vēlaties atiestatīt kumulatīvo vērtību katru gadu, varat to aprēķināt, mainot nosacījuma izteiksmi.

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

Izpildot iepriekš minēto SQL, kumulatīvā vērtība tiek ievadīta sadaļā "Gada summas kumulatīvais".

Gada-mēneša summa Kumulatīvā gada vienības summa Kumulatīvā kumulatīvā
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