Thực hiện tính toán tích lũy trong SQL

Trang Cập Nhật :
Ngày tạo trang :

tóm tắt

Giá trị tích lũy của số tiền trong đơn vị tháng năm được tính bằng SQL.

Phiên bản kiểm tra hoạt động

Phiên bản SQL Server được hỗ trợ

  • 2005
  • 2008
  • 2008 R2

Kiểm tra Phiên bản SQL Server

  • 2005
  • 2008
  • 2008 R2

Phiên bản Windows đã được thử nghiệm

  • 2008
  • 2008 R2

chất

Thông thường, khi sử dụng cơ sở dữ liệu, số tiền thường được tính cho năm và tháng được chỉ định, nhưng cũng có những trường hợp số tiền của tháng này được thêm vào dựa trên dữ liệu của tháng trước như số tiền và hàng tồn kho. Bạn có thể tính toán các giá trị tích lũy được lưu trữ hoặc lập trình, nhưng hiện tại tôi chỉ muốn thực hiện tính toán trong SQL.

Có một bảng dưới đây, với số tiền được đặt cho mỗi năm và tháng:

Số tiền tích lũy năm tích lũy số tiền lũy kế của năm
201004 100 không không
201005 200 không không
201006 150 không không
201007 300 không không
201008 50 không không
201009 220 không không
201010 240 không không
201011 280 không không
201012 400 không không
201101 450 không không
201102 520 không không
201103 120 không không
201104 140 không không
201105 450 không không
201106 270 không không
201107 640 không không
201108 340 không không
201109 230 không không
201110 280 không không
201111 320 không không
201112 350 không không
201201 230 không không
201202 270 không không
201203 350 không không

Để cập nhật theo lô trong SQL, thay vì sử dụng "số tiền của tháng trước" làm "số tiền của tháng trước", bạn có thể tính giá trị tích lũy bằng cách đính kèm điều kiện là số tiền trong quá khứ được tổng hợp từ năm mục tiêu và tháng.

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

Khi bạn thực thi SQL ở trên, giá trị tích lũy được nhập vào "Tích lũy số tiền".

Số tiền tích lũy năm tích lũy số tiền lũy kế của năm
201004 100 100 không
201005 200 300 không
201006 150 450 không
201007 300 750 không
201008 50 800 không
201009 220 1020 không
201010 240 1260 không
201011 280 1540 không
201012 400 1940 không
201101 450 2390 không
201102 520 2910 không
201103 120 3030 không
201104 140 3170 không
201105 450 3620 không
201106 270 3890 không
201107 640 4530 không
201108 340 4870 không
201109 230 5100 không
201110 280 5380 không
201111 320 5700 không
201112 350 6050 không
201201 230 6280 không
201202 270 6550 không
201203 350 6900 không

Ngoài ra, nếu bạn muốn đặt lại giá trị tích lũy hàng năm, bạn có thể tính toán nó bằng cách thay đổi biểu thức có điều kiện.

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

Khi bạn thực hiện SQL trên, giá trị tích lũy được nhập vào "Tích lũy số tiền hàng năm".

Số tiền tích lũy năm tích lũy số tiền lũy kế của năm
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