SQL'de kümülatif hesaplamalar gerçekleştirme

Sayfa güncel :
Sayfa oluşturma tarihi :

özet

Tutarın yıl-ay birimleri cinsinden kümülatif değeri SQL kullanılarak hesaplanır.

İşlem denetimi sürümü

Desteklenen SQL Server sürümleri

  • 2005
  • 2008
  • 2008 R2

SQL Server Sürümünü Kontrol Et

  • 2005
  • 2008
  • 2008 R2

Test edilen Windows sürümü

  • 2008
  • 2008 R2

madde

Normalde, bir veritabanı kullanırken, para miktarı genellikle belirtilen yıl ve ay için hesaplanır, ancak bu ayın miktarının, miktar ve envanter gibi önceki ayın verilerine dayanarak eklendiği durumlar da vardır. Depolanan veya programlı olarak kümülatif değerleri hesaplayabilirsiniz, ancak şimdilik hesaplamayı yalnızca SQL'de yapmak istiyorum.

Aşağıda, her yıl ve ay için belirlenen tutarları içeren bir tablo bulunmaktadır:

Tutarı Kümülatif
Yıl-Ay Yıl-Birim Tutarı Kümülatif
201004 100 sıfır sıfır
201005 200 sıfır sıfır
201006 150 sıfır sıfır
201007 300 sıfır sıfır
201008 50 sıfır sıfır
201009 220 sıfır sıfır
201010 240 sıfır sıfır
201011 280 sıfır sıfır
201012 400 sıfır sıfır
201101 450 sıfır sıfır
201102 520 sıfır sıfır
201103 120 sıfır sıfır
201104 140 sıfır sıfır
201105 450 sıfır sıfır
201106 270 sıfır sıfır
201107 640 sıfır sıfır
201108 340 sıfır sıfır
201109 230 sıfır sıfır
201110 280 sıfır sıfır
201111 320 sıfır sıfır
201112 350 sıfır sıfır
201201 230 sıfır sıfır
201202 270 sıfır sıfır
201203 350 sıfır sıfır

SQL'de toplu olarak güncelleştirmek için, "önceki ayın tutarı" ifadesini "önceki ayın tutarı" olarak kullanmak yerine, geçmiş tutarın hedef yıl ve aydan toplanması koşulunu ekleyerek kümülatif değeri hesaplayabilirsiniz.

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.年月

Yukarıdaki SQL'i yürüttüğünüzde, kümülatif değer "Tutar Kümülatif" içine girilir.

Tutarı Kümülatif
Yıl-Ay Yıl-Birim Tutarı Kümülatif
201004 100 100 sıfır
201005 200 300 sıfır
201006 150 450 sıfır
201007 300 750 sıfır
201008 50 800 sıfır
201009 220 1020 sıfır
201010 240 1260 sıfır
201011 280 1540 sıfır
201012 400 1940 sıfır
201101 450 2390 sıfır
201102 520 2910 sıfır
201103 120 3030 sıfır
201104 140 3170 sıfır
201105 450 3620 sıfır
201106 270 3890 sıfır
201107 640 4530 sıfır
201108 340 4870 sıfır
201109 230 5100 sıfır
201110 280 5380 sıfır
201111 320 5700 sıfır
201112 350 6050 sıfır
201201 230 6280 sıfır
201202 270 6550 sıfır
201203 350 6900 sıfır

Ayrıca, kümülatif değeri her yıl sıfırlamak istiyorsanız, koşullu ifadeyi değiştirerek hesaplayabilirsiniz.

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.年月

Yukarıdaki SQL'i yürüttüğünüzde, kümülatif değer "Yıllık Tutar Kümülatif" içine girilir.

Tutarı Kümülatif
Yıl-Ay Yıl-Birim Tutarı Kümülatif
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