ביצוע חישובים מצטברים ב- SQL

עודכן דף :
תאריך יצירת דף :

תקציר

הערך המצטבר של הסכום ביחידות של חודש השנה מחושב באמצעות SQL.

גירסת בדיקת הפעלה

גירסאות שרת SQL נתמכות

  • 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