Forum

Forum (https://www.ms-office.gr/forum/)
-   Access - Ερωτήσεις / Απαντήσεις (https://www.ms-office.gr/forum/access-erotiseis-apantiseis/)
-   -   Φίλτρο σε ερώτημα διασταύρωσης (https://www.ms-office.gr/forum/access-erotiseis-apantiseis/716-filtro-se-erotima-diastairosis.html)

PanosPan 30-08-10 08:44

Φίλτρο σε ερώτημα διασταύρωσης
 
2 Συνημμένο(α)
Καλημέρα και καλή "σεζόν" σε όλους.
Επιστρέφω με ένα ερώτημα:
Εάν μπορώ από τον βασικό μου πίνακα "ΟΝΟΜΑΣΤΙΚΗ ΚΑΤΑΣΤΑΣΗ" να φτιάξω ένα ερώτημα διασταύρωσης -με "γραμμή" στοιχεία από [ΚΑΤΗΓΟΡΙΑ] και "στήλη" από [ΔΙΕΥΘΥΝΣΗ] (βλ. "ΟΝΟΜΑΣΤΙΚΗ ΚΑΤΑΣΤΑΣΗ διασταύρωσης")- έτσι ώστε να μου δείνει την δυνατότητα να φιλτράρω τις πληροφορίες με βάση μια χρονική περίοδο από το [ΗΜΕΡΟΜΗΝΙΑ] π.χ. στοιχεία από 1/1/2010 έως 31/1/2010.
Ευχαριστώ πολύ
Πάνος

Tasos 30-08-10 12:23

Πάνο καλημέρα!

Ο κώδικας SQL που θα σου επιτρέψει να φιλτράρεις τα δεδομένα σου σε ερώτημα διασταύρωσης (με κριτήριο το διάστημα 2 ημερομηνιών) μπορούσε να είναι έτσι:

Κώδικας:

PARAMETERS [Δώσε ημερομηνία από] DateTime, [Δώσε ημερομηνία μέχρι] DateTime;
TRANSFORM Count([ΟΝΟΜΑΣΤΙΚΗ ΚΑΤΑΣΤΑΣΗ].ΜΗΤΡΩΟ) AS ΠλήθοςΤουΜΗΤΡΩΟ
SELECT [ΟΝΟΜΑΣΤΙΚΗ ΚΑΤΑΣΤΑΣΗ].ΚΑΤΗΓΟΡΙΑ, Count([ΟΝΟΜΑΣΤΙΚΗ ΚΑΤΑΣΤΑΣΗ].ΜΗΤΡΩΟ) AS [Σύνολο από ΜΗΤΡΩΟ]
FROM [ΟΝΟΜΑΣΤΙΚΗ ΚΑΤΑΣΤΑΣΗ]
WHERE ((([ΟΝΟΜΑΣΤΙΚΗ ΚΑΤΑΣΤΑΣΗ].ΗΜΕΡΟΜΗΝΙΑ) Between [Δώσε ημερομηνία από] And [Δώσε ημερομηνία μέχρι]))
GROUP BY [ΟΝΟΜΑΣΤΙΚΗ ΚΑΤΑΣΤΑΣΗ].ΚΑΤΗΓΟΡΙΑ
PIVOT [ΟΝΟΜΑΣΤΙΚΗ ΚΑΤΑΣΤΑΣΗ].ΔΙΕΥΘΥΝΣΗ;

Σε ερώτημα διασταύρωσης (με κριτήρια το μήνα και το έτος) μπορούσε να είναι έτσι:

Κώδικας:

PARAMETERS [Δώσε μήνα] Value, [Δώσε έτος] Value;
TRANSFORM Count([ΟΝΟΜΑΣΤΙΚΗ ΚΑΤΑΣΤΑΣΗ].ΜΗΤΡΩΟ) AS ΠλήθοςΤουΜΗΤΡΩΟ
SELECT [ΟΝΟΜΑΣΤΙΚΗ ΚΑΤΑΣΤΑΣΗ].ΚΑΤΗΓΟΡΙΑ, Count([ΟΝΟΜΑΣΤΙΚΗ ΚΑΤΑΣΤΑΣΗ].ΜΗΤΡΩΟ) AS [Σύνολο από ΜΗΤΡΩΟ]
FROM [ΟΝΟΜΑΣΤΙΚΗ ΚΑΤΑΣΤΑΣΗ]
WHERE (((Month([ΗΜΕΡΟΜΗΝΙΑ]))=[Δώσε μήνα]) AND ((Year([ΗΜΕΡΟΜΗΝΙΑ]))=[Δώσε έτος]))
GROUP BY [ΟΝΟΜΑΣΤΙΚΗ ΚΑΤΑΣΤΑΣΗ].ΚΑΤΗΓΟΡΙΑ
PIVOT [ΟΝΟΜΑΣΤΙΚΗ ΚΑΤΑΣΤΑΣΗ].ΔΙΕΥΘΥΝΣΗ;

Άνοιξε το ερώτημα σου σε προβολή SQL και αντίγραψε τον κώδικα που θέλεις
και δοκίμασε.

Καλή συνέχεια

Φιλικά

Τάσος

PanosPan 30-08-10 12:40

Τάσο,
Σ' ευχαριστώ για άλλη μία φορά.
Τα λέμε
Πάνος

kapetang 30-08-10 17:25

Καλησπέρα στην παρέα

Τάσο είδα τη λύση, με το παραμετρικό ερώτημα, που έδωσες στην ερώτηση του Πάνου και σκέφτηκα αν θα μπορούσαμε να ανοίγουμε το ερώτημα διασταύρωσης πατώντας το κουμπί μιας φόρμας (frmOpenQry), στην οποία δύο πλαίσια κειμένου (txtStart, txtEnd) θα προσδιόριζαν το χρονικό διάστημα που μας ενδιαφέρει.
Στις δοκιμές που έκανα το κριτήριο: [ΗΜΕΡΟΜΗΝΙΑ] between [Forms]![frmOpenQry]![txtStart] and [Forms]![frmOpenQry]![txtEnd], δε λειτουργούσε (έβγαζε λάθος) .
Υπάρχει λύση;

Φιλικά/Γιώργος

Tasos 31-08-10 07:11

Καλημέρα σε όλους!

Γιώργο, ένα κοινό ερώτημα επιλογής, μπορεί να επεξεργαστεί κριτήρια όπως [Forms]![frmOpenQry]![txtStart] και δε χρειάζεται παραμέτρους
όπως: PARAMETERS [Δώσε ημερομηνία από] DateTime, [Δώσε ημερομηνία μέχρι] DateTime;

Αντιθέτως, ένα ερώτημα διασταύρωσης, και ιδιαίτερα στο παράδειγμα μας, λόγω της φύσης του (δυναμική προσθήκη πεδίων)
δεν δέχεται παραμέτρους από άλλη πηγή εκτός από αυτές που θα δώσει ο χρήστης όταν του ζητηθεί πριν την εκτέλεση του.

Αυτό που μπορούμε να κάνουμε είναι

Αντί για :PARAMETERS [Δώσε ημερομηνία από] DateTime, [Δώσε ημερομηνία μέχρι]

να περάσουμε: PARAMETERS [Forms]![frmOpenQry]![txtStart] DateTime, [Forms]![frmOpenQry]![txtEnd] DateTime;

και στα κριτήρια του ερωτήματος:
....WHERE ((([ΟΝΟΜΑΣΤΙΚΗ ΚΑΤΑΣΤΑΣΗ].ΗΜΕΡΟΜΗΝΙΑ) Between [Forms]![frmOpenQry]![txtStart] And [Forms]![frmOpenQry]![txtEnd]))

Με άλλα λόγια αυτό ο παρακάτω κώδικας SQL επιτρέπει την δυναμική παραμετροποίηση σε ερωτήματα τύπου διασταύρωσης:
Κώδικας:

PARAMETERS [Forms]![frmOpenQry]![txtStart] DateTime, [Forms]![frmOpenQry]![txtEnd] DateTime;
TRANSFORM Count([ΟΝΟΜΑΣΤΙΚΗ ΚΑΤΑΣΤΑΣΗ].ΜΗΤΡΩΟ) AS ΠλήθοςΤουΜΗΤΡΩΟ
SELECT [ΟΝΟΜΑΣΤΙΚΗ ΚΑΤΑΣΤΑΣΗ].ΚΑΤΗΓΟΡΙΑ, Count([ΟΝΟΜΑΣΤΙΚΗ ΚΑΤΑΣΤΑΣΗ].ΜΗΤΡΩΟ) AS [Σύνολο από ΜΗΤΡΩΟ]
FROM [ΟΝΟΜΑΣΤΙΚΗ ΚΑΤΑΣΤΑΣΗ]
WHERE ((([ΟΝΟΜΑΣΤΙΚΗ ΚΑΤΑΣΤΑΣΗ].ΗΜΕΡΟΜΗΝΙΑ) Between [Forms]![frmOpenQry]![txtStart] And
[Forms]![frmOpenQry]![txtEnd]))

GROUP BY [ΟΝΟΜΑΣΤΙΚΗ ΚΑΤΑΣΤΑΣΗ].ΚΑΤΗΓΟΡΙΑ
PIVOT [ΟΝΟΜΑΣΤΙΚΗ ΚΑΤΑΣΤΑΣΗ].ΔΙΕΥΘΥΝΣΗ;

Σημείωση: H Access 2010 μας δίνει τη δυνατότητα είτε από μη μακροεντολή είτε από κώδικα VBA να περάσουμε τις παραμέτρους προγραμματιστικά.

Φιλικά

Τάσος

kapetang 31-08-10 08:14

Καλημέρα σε όλους

Τάσο ευχαριστώ για την άμεση και διεξοδική ενημέρωση. Είναι μάθημα για μένα και για τα άλλα μέλη.

Φιλικά/Γιώργος

PanosPan 01-09-10 09:15

Δημιουργία έκθεσης μετά απο εισαγωγή φίλτρου σε ερώτημα διασταύρωσης
 
1 Συνημμένο(α)
Τάσο,
Καλημέρα
ξέρεις γιατί από το ερώτημα διασταύρωσης δεν μπορώ να φτιάξω έκθεση;
Σε ευχαριστώ εκ των προτέρων.
Πάνος

Tasos 01-09-10 12:33

Καλησπέρα σε όλους!
Πάνο, τα πεδία ενός ερωτήματος Διαστάυρωσης δεν είναι αποθηκευμένα με αποτέλεσμα
ο οδηγός εκθέσεων να μην βρίσκει πεδία για να σου φτιάξει την έκθεση.
Μπορείς να περάσεις τον παρακάτω κώδικα SQL στο ερώτημα σου για να δημιουργήσεις
"σταθερά πεδία" που θα σου επιτρέψουν να δημιουργήσεις την έκθεση:

Κώδικας:

PARAMETERS [Δώσε ημερομηνία από] DateTime, [Δώσε ημερομηνία μέχρι] DateTime;
TRANSFORM Count([ΟΝΟΜΑΣΤΙΚΗ ΚΑΤΑΣΤΑΣΗ].ΜΗΤΡΩΟ) AS ΠλήθοςΤουΜΗΤΡΩΟ
SELECT [ΟΝΟΜΑΣΤΙΚΗ ΚΑΤΑΣΤΑΣΗ].ΚΑΤΗΓΟΡΙΑ, Count([ΟΝΟΜΑΣΤΙΚΗ ΚΑΤΑΣΤΑΣΗ].ΜΗΤΡΩΟ) AS [Σύνολο από ΜΗΤΡΩΟ]
FROM [ΟΝΟΜΑΣΤΙΚΗ ΚΑΤΑΣΤΑΣΗ]
WHERE ((([ΟΝΟΜΑΣΤΙΚΗ ΚΑΤΑΣΤΑΣΗ].ΗΜΕΡΟΜΗΝΙΑ) Between [Δώσε ημερομηνία από] And [Δώσε ημερομηνία μέχρι]))
GROUP BY [ΟΝΟΜΑΣΤΙΚΗ ΚΑΤΑΣΤΑΣΗ].ΚΑΤΗΓΟΡΙΑ, [ΟΝΟΜΑΣΤΙΚΗ ΚΑΤΑΣΤΑΣΗ].ΔΙΕΥΘΥΝΣΗ
 In ("ΑΛΦΑ","ΒΗΤΑ","ΓΑΜΑ","ΔΕΛΤΑ","ΕΨΙΛΟΝ")

PIVOT [ΟΝΟΜΑΣΤΙΚΗ ΚΑΤΑΣΤΑΣΗ].ΔΙΕΥΘΥΝΣΗ
 In ("ΑΛΦΑ","ΒΗΤΑ","ΓΑΜΑ","ΔΕΛΤΑ","ΕΨΙΛΟΝ")
;

Ή αν θέλεις, μπορείς να περάσεις κατευθείαν στην προέλευση εγγραφών ενός κενού ερωτήματος το παρακάτω:

Κώδικας:

TRANSFORM Count([ΟΝΟΜΑΣΤΙΚΗ ΚΑΤΑΣΤΑΣΗ].ΜΗΤΡΩΟ) AS ΠλήθοςΤουΜΗΤΡΩΟ
SELECT [ΟΝΟΜΑΣΤΙΚΗ ΚΑΤΑΣΤΑΣΗ].ΚΑΤΗΓΟΡΙΑ, Count([ΟΝΟΜΑΣΤΙΚΗ ΚΑΤΑΣΤΑΣΗ].ΜΗΤΡΩΟ) AS [Σύνολο από ΜΗΤΡΩΟ]
FROM [ΟΝΟΜΑΣΤΙΚΗ ΚΑΤΑΣΤΑΣΗ]
WHERE ((([ΟΝΟΜΑΣΤΙΚΗ ΚΑΤΑΣΤΑΣΗ].ΗΜΕΡΟΜΗΝΙΑ) Between [Δώσε ημερομηνία από] And [Δώσε ημερομηνία μέχρι]))
GROUP BY [ΟΝΟΜΑΣΤΙΚΗ ΚΑΤΑΣΤΑΣΗ].ΚΑΤΗΓΟΡΙΑ, [ΟΝΟΜΑΣΤΙΚΗ ΚΑΤΑΣΤΑΣΗ].ΔΙΕΥΘΥΝΣΗ
  In ("ΑΛΦΑ","ΒΗΤΑ","ΓΑΜΑ","ΔΕΛΤΑ","ΕΨΙΛΟΝ")
PIVOT [ΟΝΟΜΑΣΤΙΚΗ ΚΑΤΑΣΤΑΣΗ].ΔΙΕΥΘΥΝΣΗ
  In ("ΑΛΦΑ","ΒΗΤΑ","ΓΑΜΑ","ΔΕΛΤΑ","ΕΨΙΛΟΝ");

Ελπίζω να σε καλύπτει!

Καλή συνέχεια!

Τάσος

PanosPan 01-09-10 13:06

Τάσε,
είσαι καταπληκτικός
Τα λέμε
Πάνος

kapetang 01-09-10 18:34

Καλησπέρα στην παρέα

Τάσο δεν ξέρω τη χρησιμότητα της φράσης IN (......) στην πρόταση GROUP.
Έχω τη γνώμη ότι είναι περιττή. Φυσικά δεν προκαλεί και λάθος.

Φιλικά/Γιώργος


Η ώρα είναι 13:08.

Ms-Office.gr - ©2000 - 2026, Jelsoft Enterprises Ltd.


Search Engine Optimization by vBSEO 3.3.2