Kumulatīvo aprēķinu veikšana SQL
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 |