Melakukan perhitungan kumulatif dalam SQL

Halaman Diperbarui :
Tanggal pembuatan halaman :

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