SQL में संचयी परिकलन कर रहा है
सारांश
वर्ष-माह इकाइयों में राशि का संचयी मान SQL का उपयोग करके परिकलित किया जाता है।
कार्रवाई जाँच संस्करण
समर्थित SQL सर्वर संस्करण
- 2005
- 2008
- 2008 R2
SQL सर्वर संस्करण की जाँच करें
- 2005
- 2008
- 2008 R2
परीक्षण किया गया Windows संस्करण
- 2008
- 2008 R2
पदार्थ
आम तौर पर, डेटाबेस का उपयोग करते समय, धन की मात्रा की गणना अक्सर निर्दिष्ट वर्ष और महीने के लिए की जाती है, लेकिन ऐसे मामले भी हैं जहां इस महीने की राशि पिछले महीने के डेटा के आधार पर जोड़ी जाती है जैसे कि राशि और इन्वेंट्री। आप संचयी मूल्यों की गणना कर सकते हैं संग्रहीत या प्रोग्राम, लेकिन अभी के लिए मैं केवल एसक्यूएल में गणना करना चाहता हूं।
नीचे एक तालिका है, जिसमें प्रत्येक वर्ष और महीने के लिए निर्धारित राशियां हैं:
वर्ष-माह | राशि | संचयी | वर्ष-इकाई राशि संचयी |
---|---|---|---|
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 |