การคํานวณสะสมใน SQL

ปรับปรุงหน้า :
วันที่สร้างเพจ :

สรุป

มูลค่าสะสมของยอดเงินในหน่วยปี-เดือนจะคํานวณโดยใช้ SQL

เวอร์ชันการตรวจสอบการดําเนินงาน

รุ่นของ SQL Server ที่สนับสนุน

  • 2005
  • 2008
  • 2008 R2

ตรวจสอบรุ่นของเซิร์ฟเวอร์ SQL

  • 2005
  • 2008
  • 2008 R2

รุ่นของ Windows ที่ทดสอบแล้ว

  • 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