ביצוע חישובים מצטברים ב- 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 |