Wykonywanie obliczeń zbiorczych w języku SQL

Strona zaktualizowana :
Data utworzenia strony :

streszczenie

Skumulowana wartość kwoty w jednostkach roczno-miesięcznych jest obliczana przy użyciu języka SQL.

Wersja kontroli działania

Obsługiwane wersje programu SQL Server

  • 2005
  • 2008
  • 2008 R2

Sprawdź wersję programu SQL Server

  • 2005
  • 2008
  • 2008 R2

Testowana wersja systemu Windows

  • 2008
  • 2008 R2

substancja

Zwykle podczas korzystania z bazy danych kwota pieniędzy jest często obliczana dla określonego roku i miesiąca, ale zdarzają się również przypadki, w których kwota tego miesiąca jest dodawana na podstawie danych z poprzedniego miesiąca, takich jak kwota i zapasy. Możesz obliczyć skumulowane wartości przechowywane lub programowo, ale na razie chcę wykonać obliczenia tylko w SQL.

Poniżej znajduje się tabela z kwotami ustalonymi na każdy rok i miesiąc:

Kwota rok-miesiąc Skumulowana kwota jednostkowa roku skumulowana
201004 100 zero zero
201005 200 zero zero
201006 150 zero zero
201007 300 zero zero
201008 50 zero zero
201009 220 zero zero
201010 240 zero zero
201011 280 zero zero
201012 400 zero zero
201101 450 zero zero
201102 520 zero zero
201103 120 zero zero
201104 140 zero zero
201105 450 zero zero
201106 270 zero zero
201107 640 zero zero
201108 340 zero zero
201109 230 zero zero
201110 280 zero zero
201111 320 zero zero
201112 350 zero zero
201201 230 zero zero
201202 270 zero zero
201203 350 zero zero

Aby zaktualizować w partii w języku SQL, zamiast używać "kwoty z poprzedniego miesiąca" jako "kwoty z poprzedniego miesiąca", można obliczyć wartość skumulowaną, dołączając warunek, że ostatnia kwota jest agregowana z roku docelowego i miesiąca.

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

Podczas wykonywania powyższego SQL wartość skumulowana jest wprowadzana w "Skumulowana kwota".

Kwota rok-miesiąc Skumulowana kwota jednostkowa roku skumulowana
201004 100 100 zero
201005 200 300 zero
201006 150 450 zero
201007 300 750 zero
201008 50 800 zero
201009 220 1020 zero
201010 240 1260 zero
201011 280 1540 zero
201012 400 1940 zero
201101 450 2390 zero
201102 520 2910 zero
201103 120 3030 zero
201104 140 3170 zero
201105 450 3620 zero
201106 270 3890 zero
201107 640 4530 zero
201108 340 4870 zero
201109 230 5100 zero
201110 280 5380 zero
201111 320 5700 zero
201112 350 6050 zero
201201 230 6280 zero
201202 270 6550 zero
201203 350 6900 zero

Ponadto, jeśli chcesz resetować skumulowaną wartość co roku, możesz ją obliczyć, zmieniając wyrażenie warunkowe.

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

Po wykonaniu powyższego SQL wartość skumulowana jest wprowadzana w "Skumulowana kwota roczna".

Kwota rok-miesiąc Skumulowana kwota jednostkowa roku skumulowana
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