Kumulatiivisten laskutoimitusten suorittaminen SQL:ssä
yhteenveto
Summan kumulatiivinen arvo vuosikuukausina lasketaan SQL:n avulla.
Toiminnon tarkistuksen versio
Tuetut SQL Server -versiot
- 2005
- 2008
- 2008 R2
Tarkista SQL Server -versio
- 2005
- 2008
- 2008 R2
Testattu Windows-versio
- 2008
- 2008 R2
aine
Tavallisesti tietokantaa käytettäessä rahan määrä lasketaan usein määritetylle vuodelle ja kuukaudelle, mutta on myös tapauksia, joissa tämän kuukauden määrä lisätään edellisen kuukauden tietojen, kuten summan ja varaston, perusteella. Voit laskea tallennetut kumulatiiviset arvot tai ohjelmallisesti, mutta toistaiseksi haluan tehdä laskennan vain SQL:ssä.
Alla on taulukko, jossa on kullekin vuodelle ja kuukaudelle määritetyt summat:
Kumulatiivinen vuosi-kuukausisumma | kumulatiivinen | vuosiyksikkösumma kumulatiivinen | |
---|---|---|---|
201004 | 100 | nolla | nolla |
201005 | 200 | nolla | nolla |
201006 | 150 | nolla | nolla |
201007 | 300 | nolla | nolla |
201008 | 50 | nolla | nolla |
201009 | 220 | nolla | nolla |
201010 | 240 | nolla | nolla |
201011 | 280 | nolla | nolla |
201012 | 400 | nolla | nolla |
201101 | 450 | nolla | nolla |
201102 | 520 | nolla | nolla |
201103 | 120 | nolla | nolla |
201104 | 140 | nolla | nolla |
201105 | 450 | nolla | nolla |
201106 | 270 | nolla | nolla |
201107 | 640 | nolla | nolla |
201108 | 340 | nolla | nolla |
201109 | 230 | nolla | nolla |
201110 | 280 | nolla | nolla |
201111 | 320 | nolla | nolla |
201112 | 350 | nolla | nolla |
201201 | 230 | nolla | nolla |
201202 | 270 | nolla | nolla |
201203 | 350 | nolla | nolla |
Jos haluat päivittää erän SQL:ssä, voit laskea kumulatiivisen arvon liittämällä siihen ehdon, että aiempi summa on koottu kohdevuodesta ja kuukaudesta sen sijaan, että käyttäisit "edellisen kuukauden summaa" "edellisen kuukauden summan" käyttämisen "edellisen kuukauden summan" käyttämiseksi "edellisen kuukauden summana".
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.年月
Kun suoritat yllä olevan SQL:n, kumulatiivinen arvo syötetään Kumulatiivinen summa -kohtaan.
Kumulatiivinen vuosi-kuukausisumma | kumulatiivinen | vuosiyksikkösumma kumulatiivinen | |
---|---|---|---|
201004 | 100 | 100 | nolla |
201005 | 200 | 300 | nolla |
201006 | 150 | 450 | nolla |
201007 | 300 | 750 | nolla |
201008 | 50 | 800 | nolla |
201009 | 220 | 1020 | nolla |
201010 | 240 | 1260 | nolla |
201011 | 280 | 1540 | nolla |
201012 | 400 | 1940 | nolla |
201101 | 450 | 2390 | nolla |
201102 | 520 | 2910 | nolla |
201103 | 120 | 3030 | nolla |
201104 | 140 | 3170 | nolla |
201105 | 450 | 3620 | nolla |
201106 | 270 | 3890 | nolla |
201107 | 640 | 4530 | nolla |
201108 | 340 | 4870 | nolla |
201109 | 230 | 5100 | nolla |
201110 | 280 | 5380 | nolla |
201111 | 320 | 5700 | nolla |
201112 | 350 | 6050 | nolla |
201201 | 230 | 6280 | nolla |
201202 | 270 | 6550 | nolla |
201203 | 350 | 6900 | nolla |
Lisäksi, jos haluat nollata kumulatiivisen arvon joka vuosi, voit laskea sen muuttamalla ehdollista lauseketta.
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.年月
Kun suoritat yllä olevan SQL:n, kumulatiivinen arvo syötetään "Annual Amount Cumulative" -kohtaan.
Kumulatiivinen vuosi-kuukausisumma | kumulatiivinen | vuosiyksikkösumma kumulatiivinen | |
---|---|---|---|
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 |