Καλώς ορίσατε στο dotNETZone.gr - Σύνδεση | Εγγραφή | Βοήθεια
σε

 

Αρχική σελίδα Ιστολόγια Συζητήσεις Εκθέσεις Φωτογραφιών Αρχειοθήκες

Running Totals ή πως να κρατάμε το λογιστή ευτυχισμένο...

Îåêßíçóå áðü ôï ìÝëïò gkontog. Τελευταία δημοσίευση από το μέλος Μάριος Μαργαρίτης στις 14-09-2004, 15:51. Υπάρχουν 4 απαντήσεις.
Ταξινόμηση Δημοσιεύσεων: Προηγούμενο Επόμενο
  •  20-06-2004, 17:31 59

    Running Totals ή πως να κρατάμε το λογιστή ευτυχισμένο...

    Ας το παραδεχτούμε, μία κατηγορία ανθρώπων έχει μία ερωτική σχέση με τα προοδευτικά υπόλοιπα ή running totals. Δεν υπάρχει εκτύπωση που να μην θέλουν και το σχετικό προοδευτικό υπόλοιπο και μερικές φορές παραπάνω από ένα! Στο ακόλουθο παράδειγμα θα δούμε έναν τρόπο με τον οποίο μπορούμε να τα υπολογίσουμε στον SQL Server με πολύ μικρό κόστος στις επιδόσεις του συστήματος.

    Αρχικά δημιουργούμε έναν πίνακα, έστω ο πίνακας Transactions με χρηματικές κινήσεις ανά πελάτη, ο οποίος δημιουργείται με το ακόλουθο query:

    CREATE TABLE [dbo].[Transactions] (
                                                       [Trn_ID] [int] IDENTITY (1, 1) NOT NULL ,
                                                       [Trn_CustID] [int] NOT NULL ,
                                                       [Trn_Date] [datetime] NOT NULL ,
                                                       [Trn_Amount] [decimal](18, 2) NOT NULL ) ON [PRIMARY]

    GO

    ALTER TABLE [dbo].[Transactions] WITH NOCHECK ADD CONSTRAINT [PK_Transactions] PRIMARY KEY CLUSTERED (
                                                                   [Trn_ID] ) ON [PRIMARY]

    GO

    ALTER TABLE [dbo].[Transactions] ADD
    CONSTRAINT [DF_Transactions_Trn_CustID] DEFAULT (10) FOR [Trn_CustID],
    CONSTRAINT [DF_Transactions_Trn_Date] DEFAULT (getdate()) FOR [Trn_Date],
    CONSTRAINT [DF_Transactions_Trn_Amount] DEFAULT (0) FOR [Trn_Amount]

    GO

    Προσθέτουμε κάποιες εγγραφές στον πίνακα όπου για χάρη του παραδείγματος θεωρούμε ότι όλες αφορούν έναν πελάτη, αυτόν με Trn_CustID = 10. Στη συνέχεια στον query analyzer εκτελούμε τον παρακάτω κώδικα:

    DECLARE @RunningTotal decimal(18, 2)

    DECLARE @Temp TABLE(
                                     Trn_Date datetime,
                                     Trn_Amount decimal(18, 2),
                                     Trn_RunningTotal decimal(18, 2))

    SET NOCOUNT ON

    INSERT INTO @Temp
    SELECT 
                Trn_Date,
                Trn_Amount,
                0
    FROM Transactions
    ORDER BY Trn_ID

    SET @RunningTotal = 0

    UPDATE @Temp
    SET @RunningTotal = Trn_RunningTotal = Trn_Amount + @RunningTotal

    SELECT * FROM @Temp

    Στο τελικό SELECT statement, το πεδίο Trn_RunningTotal περιέχει την τιμή του τρέχοντος υπολοίπου που ήταν και το αρχικό ζητούμενο. Με την τεχνική αυτή μπορούμε επίσης να υπολογίσουμε και άλλα μεγέθη όπως πχ το τρέχον υπόλοιπο ενός είδους σε μία αποθήκη και πως αυτό μεταβάλλετε με τις σχετικές εισαγωγές - εξαγωγές.

    Κοντογιάννης Γεώργιος
    MCP, MCSD

  •  20-06-2004, 17:53 60 σε απάντηση της 59

    Re: Running Totals ή πως να κρατάμε το λογιστή ευτυχισμένο...

    Πάρα πολύ καλό παράδειγμα του τι είχα στο μυαλό μου όταν έφτιαξα αυτό το forum!!  Είμαι σίγουρος ότι όλοι μας έχουμε κάποια τέτοια θέματα που έχουμε βρει/μάθει κατά καιρούς, και η μεγάλη δύναμη των κοινοτήτων όπως αυτή είναι να μοιραζόμαστε αυτή τη γνώση.

    Ελπίζω σύντομα (όταν βγούμε και live!) να γεμίσει αυτό το forum και να γίνει σημείο αναφοράς όλων μας όταν θέλουμε να βρούμε κάποιο μικρό "διαμαντάκι" κώδικα!

    Patrick


    Patrick
  •  06-07-2004, 14:46 78 σε απάντηση της 59

    Re: Running Totals ή πως να κρατάμε το λογιστή ευτυχισμένο...

    Hello George ,

    Ενας τρόπος ακομα :

    SELECT  
              Trn_Date, 
              Rt.Trn_Amount,
              (SELECT SUM(Trn_Amount) FROM Transactions WHERE Trn_ID <= Rt.Trn_ID) Trn_RunningTotal
    FROM
              Transactions Rt


    Sex is like programing; One mistake, and you will have to support it for the rest of your life…
  •  08-07-2004, 17:17 81 σε απάντηση της 59

    Re: Running Totals ή πως να κρατάμε το λογιστή ευτυχισμένο...

    Very good George!! Πάει και σφαίρα.Yes
    Philippos Kalogeropoulos
    M.C.P.
  •  14-09-2004, 15:51 177 σε απάντηση της 59

    Sleep [S] Re: Running Totals ή πως να κρατάμε το λογιστή ευτυχισμένο...

    Μόλις το χρησιμοποίησα για να κάνω custom αρίθμιση καθώς τα ID's του πίνακα δεν ήταν καλά για τους χρήστες.

    Thanx
    Marios Margaritis
    Software Architect & IT Consultant
    theWorks
Προβολή Τροφοδοσίας RSS με μορφή XML
Με χρήση του Community Server (Commercial Edition), από την Telligent Systems