Melakukan perhitungan kumulatif dalam SQL
ringkasan
Nilai kumulatif jumlah dalam unit tahun-bulan dihitung menggunakan SQL.
Versi pemeriksaan operasi
Versi SQL Server yang Didukung
- 2005
- 2008
- 2008 R2
Periksa Versi SQL Server
- 2005
- 2008
- 2008 R2
Versi Windows yang diuji
- 2008
- 2008 R2
zat
Biasanya, ketika menggunakan database, jumlah uang sering dihitung untuk tahun dan bulan yang ditentukan, tetapi ada juga kasus di mana jumlah bulan ini ditambahkan berdasarkan data bulan sebelumnya seperti jumlah dan inventaris. Anda dapat menghitung nilai kumulatif yang disimpan atau secara terprogram, tetapi untuk saat ini saya ingin melakukan perhitungan hanya di SQL.
Ada tabel di bawah ini, dengan jumlah yang ditetapkan untuk setiap tahun dan bulan:
Jumlah Tahun-Bulan | Kumulatif | Jumlah Tahun-Unit Kumulatif | |
---|---|---|---|
201004 | 100 | nol | nol |
201005 | 200 | nol | nol |
201006 | 150 | nol | nol |
201007 | 300 | nol | nol |
201008 | 50 | nol | nol |
201009 | 220 | nol | nol |
201010 | 240 | nol | nol |
201011 | 280 | nol | nol |
201012 | 400 | nol | nol |
201101 | 450 | nol | nol |
201102 | 520 | nol | nol |
201103 | 120 | nol | nol |
201104 | 140 | nol | nol |
201105 | 450 | nol | nol |
201106 | 270 | nol | nol |
201107 | 640 | nol | nol |
201108 | 340 | nol | nol |
201109 | 230 | nol | nol |
201110 | 280 | nol | nol |
201111 | 320 | nol | nol |
201112 | 350 | nol | nol |
201201 | 230 | nol | nol |
201202 | 270 | nol | nol |
201203 | 350 | nol | nol |
Untuk memperbarui dalam batch di SQL, alih-alih menggunakan "jumlah bulan sebelumnya" sebagai "jumlah bulan sebelumnya", Anda dapat menghitung nilai kumulatif dengan melampirkan kondisi bahwa jumlah sebelumnya dikumpulkan dari tahun target dan bulan.
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.年月
Saat Anda menjalankan SQL di atas, nilai kumulatif dimasukkan dalam "Jumlah Kumulatif".
Jumlah Tahun-Bulan | Kumulatif | Jumlah Tahun-Unit Kumulatif | |
---|---|---|---|
201004 | 100 | 100 | nol |
201005 | 200 | 300 | nol |
201006 | 150 | 450 | nol |
201007 | 300 | 750 | nol |
201008 | 50 | 800 | nol |
201009 | 220 | 1020 | nol |
201010 | 240 | 1260 | nol |
201011 | 280 | 1540 | nol |
201012 | 400 | 1940 | nol |
201101 | 450 | 2390 | nol |
201102 | 520 | 2910 | nol |
201103 | 120 | 3030 | nol |
201104 | 140 | 3170 | nol |
201105 | 450 | 3620 | nol |
201106 | 270 | 3890 | nol |
201107 | 640 | 4530 | nol |
201108 | 340 | 4870 | nol |
201109 | 230 | 5100 | nol |
201110 | 280 | 5380 | nol |
201111 | 320 | 5700 | nol |
201112 | 350 | 6050 | nol |
201201 | 230 | 6280 | nol |
201202 | 270 | 6550 | nol |
201203 | 350 | 6900 | nol |
Selain itu, jika Anda ingin mengatur ulang nilai kumulatif setiap tahun, Anda dapat menghitungnya dengan mengubah ekspresi bersyarat.
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.年月
Saat Anda menjalankan SQL di atas, nilai kumulatif dimasukkan dalam "Jumlah Kumulatif Tahunan".
Jumlah Tahun-Bulan | Kumulatif | Jumlah Tahun-Unit Kumulatif | |
---|---|---|---|
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 |