انجام محاسبات تجمعی در 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