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 |