Εκτέλεση αθροιστικών υπολογισμών σε SQL
περίληψη
Η αθροιστική τιμή του ποσού σε μονάδες μήνα υπολογίζεται με χρήση SQL.
Έκδοση ελέγχου λειτουργίας
Υποστηριζόμενες εκδόσεις του SQL Server
- 2005
- 2008
- 2008 R2
Έλεγχος έκδοσης του SQL Server
- 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 |