Kaupiamųjų skaičiavimų atlikimas SQL
suvestinė
Kaupiamoji sumos vertė metų mėnesių vienetais apskaičiuojama naudojant SQL.
Operacijos tikrinimo versija
Palaikomos SQL serverio versijos
- 2005
- 2008
- 2008 m. R2
Tikrinti SQL serverio versiją
- 2005
- 2008
- 2008 m. R2
Išbandyta "Windows" versija
- 2008
- 2008 m. R2
medžiaga
Paprastai, naudojant duomenų bazę, pinigų suma dažnai apskaičiuojama už nurodytus metus ir mėnesį, tačiau taip pat yra atvejų, kai šio mėnesio suma pridedama remiantis praėjusio mėnesio duomenimis, pvz., Suma ir inventoriumi. Kaupiamąsias saugomas reikšmes galite apskaičiuoti arba programiškai, tačiau kol kas skaičiavimą noriu atlikti tik SQL formatu.
Žemiau yra lentelė, kurioje pateikiamos sumos, nustatytos kiekvieniems metams ir mėnesiui:
Sukaupta metų ir mėnesio | suma | kaupiamoji | metų vieneto suma |
---|---|---|---|
201004 | 100 | nulis | nulis |
201005 | 200 | nulis | nulis |
201006 | 150 | nulis | nulis |
201007 | 300 | nulis | nulis |
201008 | 50 | nulis | nulis |
201009 | 220 | nulis | nulis |
201010 | 240 | nulis | nulis |
201011 | 280 | nulis | nulis |
201012 | 400 | nulis | nulis |
201101 | 450 | nulis | nulis |
201102 | 520 | nulis | nulis |
201103 | 120 | nulis | nulis |
201104 | 140 | nulis | nulis |
201105 | 450 | nulis | nulis |
201106 | 270 | nulis | nulis |
201107 | 640 | nulis | nulis |
201108 | 340 | nulis | nulis |
201109 | 230 | nulis | nulis |
201110 | 280 | nulis | nulis |
201111 | 320 | nulis | nulis |
201112 | 350 | nulis | nulis |
201201 | 230 | nulis | nulis |
201202 | 270 | nulis | nulis |
201203 | 350 | nulis | nulis |
Norėdami atnaujinti SQL paketu, užuot naudoję "ankstesnio mėnesio sumą" kaip "ankstesnio mėnesio sumą", galite apskaičiuoti kaupiamąją vertę pridėdami sąlygą, kad ankstesnė suma yra agreguota iš tikslinių metų ir mėnesio.
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.年月
Kai vykdote pirmiau nurodytą SQL, kaupiamoji vertė įvedama į "Kaupiamoji suma".
Sukaupta metų ir mėnesio | suma | kaupiamoji | metų vieneto suma |
---|---|---|---|
201004 | 100 | 100 | nulis |
201005 | 200 | 300 | nulis |
201006 | 150 | 450 | nulis |
201007 | 300 | 750 | nulis |
201008 | 50 | 800 | nulis |
201009 | 220 | 1020 | nulis |
201010 | 240 | 1260 | nulis |
201011 | 280 | 1540 | nulis |
201012 | 400 | 1940 | nulis |
201101 | 450 | 2390 | nulis |
201102 | 520 | 2910 | nulis |
201103 | 120 | 3030 | nulis |
201104 | 140 | 3170 | nulis |
201105 | 450 | 3620 | nulis |
201106 | 270 | 3890 | nulis |
201107 | 640 | 4530 | nulis |
201108 | 340 | 4870 | nulis |
201109 | 230 | 5100 | nulis |
201110 | 280 | 5380 | nulis |
201111 | 320 | 5700 | nulis |
201112 | 350 | 6050 | nulis |
201201 | 230 | 6280 | nulis |
201202 | 270 | 6550 | nulis |
201203 | 350 | 6900 | nulis |
Be to, jei norite kasmet iš naujo nustatyti kaupiamąją vertę, galite ją apskaičiuoti pakeisdami sąlyginę išraišką.
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.年月
Kai vykdote pirmiau minėtą SQL, kaupiamoji vertė įvedama į "Metinė kaupiamoji suma".
Sukaupta metų ir mėnesio | suma | kaupiamoji | metų vieneto suma |
---|---|---|---|
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 |