Kumulatív számítások végrehajtása az SQL-ben

Oldal frissítve :
Oldal létrehozásának dátuma :

összefoglalás

Az összeg kumulatív értékét az év-hónap egységekben az SQL segítségével számítják ki.

Műveletellenőrzési verzió

Támogatott SQL Server verziók

  • 2005
  • 2008
  • 2008 R2

Sql Server verzió ellenőrzése

  • 2005
  • 2008
  • 2008 R2

Tesztelt Windows verzió

  • 2008
  • 2008 R2

lényeg

Általában egy adatbázis használatakor a pénzösszeget gyakran kiszámítják a megadott évre és hónapra, de vannak olyan esetek is, amikor ennek a hónapnak az összegét az előző hónap adatai, például az összeg és a készlet alapján adják hozzá. Kiszámíthatja a tárolt vagy programozott kumulatív értékeket, de egyelőre csak SQL-ben szeretném elvégezni a számítást.

Az alábbi táblázat tartalmazza az egyes évekre és hónapokra meghatározott összegeket:

Év-hónap összeg kumulatív év-egység összeg kumulatív
201004 100 nulla nulla
201005 200 nulla nulla
201006 150 nulla nulla
201007 300 nulla nulla
201008 50 nulla nulla
201009 220 nulla nulla
201010 240 nulla nulla
201011 280 nulla nulla
201012 400 nulla nulla
201101 450 nulla nulla
201102 520 nulla nulla
201103 120 nulla nulla
201104 140 nulla nulla
201105 450 nulla nulla
201106 270 nulla nulla
201107 640 nulla nulla
201108 340 nulla nulla
201109 230 nulla nulla
201110 280 nulla nulla
201111 320 nulla nulla
201112 350 nulla nulla
201201 230 nulla nulla
201202 270 nulla nulla
201203 350 nulla nulla

Az SQL kötegben történő frissítéshez ahelyett, hogy "az előző hónap összege" kifejezést "az előző hónap összegeként" használná, kiszámíthatja a kumulatív értéket azzal a feltétellel, hogy a múltbeli összeget a célévből és a hónapból összesíti.

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

A fenti SQL végrehajtásakor a kumulatív érték az "Összegmimálás" mezőbe kerül.

Év-hónap összeg kumulatív év-egység összeg kumulatív
201004 100 100 nulla
201005 200 300 nulla
201006 150 450 nulla
201007 300 750 nulla
201008 50 800 nulla
201009 220 1020 nulla
201010 240 1260 nulla
201011 280 1540 nulla
201012 400 1940 nulla
201101 450 2390 nulla
201102 520 2910 nulla
201103 120 3030 nulla
201104 140 3170 nulla
201105 450 3620 nulla
201106 270 3890 nulla
201107 640 4530 nulla
201108 340 4870 nulla
201109 230 5100 nulla
201110 280 5380 nulla
201111 320 5700 nulla
201112 350 6050 nulla
201201 230 6280 nulla
201202 270 6550 nulla
201203 350 6900 nulla

Ezenkívül, ha minden évben alaphelyzetbe szeretné állítani a kumulatív értéket, akkor azt a feltételes kifejezés módosításával is kiszámíthatja.

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

A fenti SQL végrehajtásakor a kumulatív érték az "Éves összeg összesítés" mezőbe kerül.

Év-hónap összeg kumulatív év-egység összeg 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