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

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

Trang Cập Nhật : 29 Tháng Năm 2022

Ngày tạo trang : 14 Tháng Chín 2020

Ngày tạo trang :

Tweet

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