SQL에서 누적 계산 수행

페이지 업데이트 :
페이지 생성 날짜 :

요약

연도-월 단위로 된 금액의 누적 값은 SQL을 사용하여 계산됩니다.

작업 확인 버전

지원되는 SQL 서버 버전

  • 2005
  • 2008
  • 2008년 R2

SQL 서버 버전 확인

  • 2005
  • 2008
  • 2008년 R2

테스트 된 윈도우 버전

  • 2008
  • 2008년 R2

물질

일반적으로 데이터베이스를 사용할 때 금액은 지정된 연도 및 월에 대해 계산되는 경우가 많지만 금액 및 재고와 같은 이전 달의 데이터를 기반으로 이번 달의 금액이 추가되는 경우도 있습니다. 저장되거나 프로그래밍 방식으로 누적 값을 계산할 수 있지만 지금은 SQL에서만 계산을 수행하려고합니다.

아래 표가 있으며 각 연도와 월에 대해 설정된 금액이 있습니다.

금액 적
연도-월연도-단위 금액 누적
201004 100
201005 200
201006 150
201007 300
201008 50
201009 220
201010 240
201011 280
201012 400
201101 450
201102 520
201103 120
201104 140
201105 450
201106 270
201107 640
201108 340
201109 230
201110 280
201111 320
201112 350
201201 230
201202 270
201203 350

SQL에서 일괄 적으로 업데이트하려면 "이전 달의 금액"을 "이전 달의 금액"으로 사용하는 대신 대상 연도 및 월에서 과거 금액이 집계되는 조건을 첨부하여 누적 값을 계산할 수 있습니다.

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

위의 SQL을 실행할 때 누적 값은 "누적 금액"에 입력됩니다.

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

또한 매년 누적 값을 재설정하려는 경우 조건식을 변경하여 계산할 수 있습니다.

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

위의 SQL을 실행할 때 누적 값은 "연간 누적 금액"에 입력됩니다.

금액 적
연도-월연도-단위 금액 누적
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