Καλησπέρα
Θα συνεχίσω με το παράδειγμα του Σπύρου, διευκρινίζοντας κάποια σημεία:
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 θα προσθέσει ένα περίεργο δικό της.
Φιλικά/Γιώργος