Kaupiamųjų skaičiavimų atlikimas SQL

Puslapis atnaujintas :
Puslapio sukūrimo data :

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