Udførelse af kumulative beregninger i SQL
resumé
Den kumulative værdi af beløbet i år-månedsenheder beregnes ved hjælp af SQL.
Version af betjeningskontrol
Understøttede SQL Server-versioner
- 2005
- 2008
- 2008 R2
Tjek SQL Server-version
- 2005
- 2008
- 2008 R2
Testet Windows-version
- 2008
- 2008 R2
stof
Normalt, når du bruger en database, beregnes mængden af penge ofte for det angivne år og måned, men der er også tilfælde, hvor mængden af denne måned tilføjes baseret på dataene fra den foregående måned, såsom beløb og lager. Du kan beregne kumulative værdier, der er gemt eller programmatisk, men for nu vil jeg kun foretage beregningen i SQL.
Der er en tabel nedenfor med beløb fastsat for hvert år og måned:
Beløb for år-måned | Kumulativt beløb for år-enhed Kumulativt | ||
---|---|---|---|
201004 | 100 | nul | nul |
201005 | 200 | nul | nul |
201006 | 150 | nul | nul |
201007 | 300 | nul | nul |
201008 | 50 | nul | nul |
201009 | 220 | nul | nul |
201010 | 240 | nul | nul |
201011 | 280 | nul | nul |
201012 | 400 | nul | nul |
201101 | 450 | nul | nul |
201102 | 520 | nul | nul |
201103 | 120 | nul | nul |
201104 | 140 | nul | nul |
201105 | 450 | nul | nul |
201106 | 270 | nul | nul |
201107 | 640 | nul | nul |
201108 | 340 | nul | nul |
201109 | 230 | nul | nul |
201110 | 280 | nul | nul |
201111 | 320 | nul | nul |
201112 | 350 | nul | nul |
201201 | 230 | nul | nul |
201202 | 270 | nul | nul |
201203 | 350 | nul | nul |
For at opdatere i en batch i SQL kan du i stedet for at bruge "mængden af den foregående måned" som "beløbet for den foregående måned" beregne den kumulative værdi ved at vedhæfte betingelsen om, at det tidligere beløb aggregeres fra målåret og måneden.
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.年月
Når du udfører ovenstående SQL, indtastes den kumulative værdi i "Beløb kumulativ".
Beløb for år-måned | Kumulativt beløb for år-enhed Kumulativt | ||
---|---|---|---|
201004 | 100 | 100 | nul |
201005 | 200 | 300 | nul |
201006 | 150 | 450 | nul |
201007 | 300 | 750 | nul |
201008 | 50 | 800 | nul |
201009 | 220 | 1020 | nul |
201010 | 240 | 1260 | nul |
201011 | 280 | 1540 | nul |
201012 | 400 | 1940 | nul |
201101 | 450 | 2390 | nul |
201102 | 520 | 2910 | nul |
201103 | 120 | 3030 | nul |
201104 | 140 | 3170 | nul |
201105 | 450 | 3620 | nul |
201106 | 270 | 3890 | nul |
201107 | 640 | 4530 | nul |
201108 | 340 | 4870 | nul |
201109 | 230 | 5100 | nul |
201110 | 280 | 5380 | nul |
201111 | 320 | 5700 | nul |
201112 | 350 | 6050 | nul |
201201 | 230 | 6280 | nul |
201202 | 270 | 6550 | nul |
201203 | 350 | 6900 | nul |
Hvis du vil nulstille den kumulative værdi hvert år, kan du desuden beregne den ved at ændre det betingede udtryk.
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.年月
Når du udfører ovenstående SQL, indtastes den kumulative værdi i "Årligt beløb kumulativt".
Beløb for år-måned | Kumulativt beløb for år-enhed Kumulativt | ||
---|---|---|---|
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 |