Melakukan pengiraan kumulatif dalam SQL

Laman dikemaskini :
Tarikh penciptaan halaman :

Ringkasan

Nilai kumulatif amaun dalam unit bulan tahun dikira menggunakan SQL.

Versi semakan operasi

Versi SQL Server yang Disokong

  • 2005
  • 2008
  • 2008 R2

Semak Versi Pelayan SQL

  • 2005
  • 2008
  • 2008 R2

Versi Windows yang diuji

  • 2008
  • 2008 R2

Bahan

Biasanya, apabila menggunakan pangkalan data, jumlah wang sering dikira untuk tahun dan bulan yang ditentukan, tetapi terdapat juga kes di mana jumlah bulan ini ditambah berdasarkan data bulan sebelumnya seperti jumlah dan inventori. Anda boleh mengira nilai kumulatif yang disimpan atau secara programatik, tetapi buat masa ini saya mahu melakukan pengiraan hanya dalam SQL.

Terdapat jadual di bawah, dengan jumlah yang ditetapkan untuk setiap tahun dan bulan:

Jumlah Tahun Bulan Kumulatif Tahun-Unit Jumlah Kumulatif
201004 100 Batal Batal
201005 200 Batal Batal
201006 150 Batal Batal
201007 300 Batal Batal
201008 50 Batal Batal
201009 220 Batal Batal
201010 240 Batal Batal
201011 280 Batal Batal
201012 400 Batal Batal
201101 450 Batal Batal
201102 520 Batal Batal
201103 120 Batal Batal
201104 140 Batal Batal
201105 450 Batal Batal
201106 270 Batal Batal
201107 640 Batal Batal
201108 340 Batal Batal
201109 230 Batal Batal
201110 280 Batal Batal
201111 320 Batal Batal
201112 350 Batal Batal
201201 230 Batal Batal
201202 270 Batal Batal
201203 350 Batal Batal

Untuk mengemas kini dalam kumpulan dalam SQL, bukannya menggunakan "jumlah bulan sebelumnya" sebagai "jumlah bulan sebelumnya", anda boleh mengira nilai kumulatif dengan melampirkan syarat bahawa jumlah masa lalu diagregatkan dari tahun sasaran 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.年月

Apabila anda melaksanakan SQL di atas, nilai kumulatif dimasukkan dalam "Amaun Kumulatif".

Jumlah Tahun Bulan Kumulatif Tahun-Unit Jumlah Kumulatif
201004 100 100 Batal
201005 200 300 Batal
201006 150 450 Batal
201007 300 750 Batal
201008 50 800 Batal
201009 220 1020 Batal
201010 240 1260 Batal
201011 280 1540 Batal
201012 400 1940 Batal
201101 450 2390 Batal
201102 520 2910 Batal
201103 120 3030 Batal
201104 140 3170 Batal
201105 450 3620 Batal
201106 270 3890 Batal
201107 640 4530 Batal
201108 340 4870 Batal
201109 230 5100 Batal
201110 280 5380 Batal
201111 320 5700 Batal
201112 350 6050 Batal
201201 230 6280 Batal
201202 270 6550 Batal
201203 350 6900 Batal

Di samping itu, jika anda ingin menetapkan semula nilai kumulatif setiap tahun, anda boleh mengiranya dengan menukar ungkapan 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.年月

Apabila anda melaksanakan SQL di atas, nilai kumulatif dimasukkan dalam "Jumlah Kumulatif Tahunan".

Jumlah Tahun Bulan Kumulatif Tahun-Unit Jumlah 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