Εμφάνιση ενός μόνο μηνύματος
  #7  
Παλιά 04-10-15, 12:32
kapetang Ο χρήστης kapetang δεν είναι συνδεδεμένος
Όνομα: Γιώργος
Έκδοση λογισμικού Office: Ms-Office 2010
Γλώσσα λογισμικού Office: Ελληνική, Αγγλική
 
Εγγραφή: 18-06-2010
Μηνύματα: 3.674
Προεπιλογή

Καλησπέρα

Θα συνεχίσω με το παράδειγμα του Σπύρου, διευκρινίζοντας κάποια σημεία:

1) Το παρακάτω ερώτημα (Qry1) εμφανίζει όλες τις εγγραφές του πίνακα table1 και ένα μερικό άθροισμα για κάθε όνομα.

Κώδικας:
SELECT iName, iValue  FROM Table1
UNION ALL 
SELECT 'SubTotal', sum(iValue)  FROM Table1 GROUP BY iname;
2) Επειδή τα μερικά αθροίσματα δεν παρουσιάζονται στο τέλος κάθε ομάδας ονομάτων, θα πρέπει να βρούμε ένα κατάλληλο τρόπο ταξινόμησης.

Μπορούμε να πετύχουμε μια σωστή ταξινόμηση προσθέτοντας στο παραπάνω ερώτημα βοηθητικά πεδία ταξινόμησης.

Έτσι δημιουργήθηκε το ερώτημα Qry2

Κώδικας:
SELECT iName, iValue , iName  as R1, 0 as R2 FROM Table1
UNION ALL 
SELECT 'SubTotal', sum(iValue)  , iName  as R1, 1 as R2 FROM Table1 GROUP BY iname
ORDER BY 3, 4;
Στο ερώτημα αυτό προστέθηκαν για την ταξινόμηση τα πεδία R1 και R2.

Το πεδίο R1 περιέχει τα ονόματα και το πεδίο R2 τιμή 0 για τα ονόματα και 1 για τα υποσύνολα.

Προτίμησα αυτόν τον τρόπο ταξινόμησης επειδή δίνει σωστό αποτέλεσμα και για αρνητικές τιμές στο πεδίο iValue

Στην πρόταση ORDER BY, που αναφέρεται σε όλες τις εγγραφές του ερωτήματος ένωσης, η ταξινόμηση γίνεται ως προς το 3ο και 4ο πεδίο.

3) Το Qry2 εμφανίζει και τα βοηθητικά πεδία ταξινόμησης R1 και R2.

Το Qry3 δεν τα περιέχει.

Κώδικας:
SELECT P.iName, P.iValue
FROM
(SELECT iName, iValue , iName  as R1, 0 as R2 FROM Table1
UNION ALL SELECT 'SubTotal', sum(iValue)  , iName  as R1, 1 as R2 FROM Table1 GROUP BY iname
ORDER BY 3, 4)  AS P;
Το ψευδώνυμο P βοηθάει στην προβολή σχεδίασης. Αν δεν το βάλουμε η access θα προσθέσει ένα περίεργο δικό της.

Φιλικά/Γιώργος
Συνημμένα Αρχεία
Τύπος Αρχείου: accdb QueryWithSubTotals2.accdb (520,0 KB, 43 εμφανίσεις)
Απάντηση με παράθεση