Ανανέωση ιστοσελίδας
ms-office.gr > Forum > Microsoft Access > Access - Ερωτήσεις / Απαντήσεις > Φίλτρο σε ερώτημα διασταύρωσης

Access - Ερωτήσεις / Απαντήσεις Access + VBA... Εδώ δεν υπάρχουν όρια!

Απάντηση στο θέμα

 

Εργαλεία Θεμάτων Τρόποι εμφάνισης
  #1  
Παλιά 30-08-10, 09:44
Όνομα: Πάνος
Έκδοση λογισμικού Office: Ms-Office 2007
Γλώσσα λογισμικού Office: Ελληνική
 
Εγγραφή: 05-02-2010
Περιοχή: Αττική
Μηνύματα: 163
Προεπιλογή Φίλτρο σε ερώτημα διασταύρωσης

Καλημέρα και καλή "σεζόν" σε όλους.
Επιστρέφω με ένα ερώτημα:
Εάν μπορώ από τον βασικό μου πίνακα "ΟΝΟΜΑΣΤΙΚΗ ΚΑΤΑΣΤΑΣΗ" να φτιάξω ένα ερώτημα διασταύρωσης -με "γραμμή" στοιχεία από [ΚΑΤΗΓΟΡΙΑ] και "στήλη" από [ΔΙΕΥΘΥΝΣΗ] (βλ. "ΟΝΟΜΑΣΤΙΚΗ ΚΑΤΑΣΤΑΣΗ διασταύρωσης")- έτσι ώστε να μου δείνει την δυνατότητα να φιλτράρω τις πληροφορίες με βάση μια χρονική περίοδο από το [ΗΜΕΡΟΜΗΝΙΑ] π.χ. στοιχεία από 1/1/2010 έως 31/1/2010.
Ευχαριστώ πολύ
Πάνος
Συνημμένα Αρχεία
Τύπος Αρχείου: accdb ΕΡΩΤΗΜΑ ΔΙΑΣΤΑΥΡΩΣΗΣ.accdb (448,0 KB, 5 εμφανίσεις)
Τύπος Αρχείου: mdb ΕΡΩΤΗΜΑ ΔΙΑΣΤΑΥΡΩΣΗΣ.mdb (288,0 KB, 11 εμφανίσεις)
Απάντηση με παράθεση
  #2  
Παλιά 30-08-10, 13:23
Το avatar του χρήστη Tasos
Διαχειριστής
Όνομα: Τάσος Φιλοξενιδης
Έκδοση λογισμικού Office: Ms-Office 365
Γλώσσα λογισμικού Office: Ελληνική, Αγγλική, Γερμανική
 
Εγγραφή: 21-10-2009
Μηνύματα: 2.011
Προεπιλογή

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

Ο κώδικας 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 και αντίγραψε τον κώδικα που θέλεις
και δοκίμασε.

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

Φιλικά

Τάσος
__________________
Ms-Office Development Team
Ανάπτυξη επαγγελματικών εφαρμογών
Απάντηση με παράθεση
  #3  
Παλιά 30-08-10, 13:40
Όνομα: Πάνος
Έκδοση λογισμικού Office: Ms-Office 2007
Γλώσσα λογισμικού Office: Ελληνική
 
Εγγραφή: 05-02-2010
Περιοχή: Αττική
Μηνύματα: 163
Προεπιλογή

Τάσο,
Σ' ευχαριστώ για άλλη μία φορά.
Τα λέμε
Πάνος
Απάντηση με παράθεση
  #4  
Παλιά 30-08-10, 18:25
Όνομα: Γιώργος
Έκδοση λογισμικού Office: Ms-Office 2010
Γλώσσα λογισμικού Office: Ελληνική, Αγγλική
 
Εγγραφή: 18-06-2010
Μηνύματα: 3.674
Προεπιλογή

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

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

Φιλικά/Γιώργος
Απάντηση με παράθεση
  #5  
Παλιά 31-08-10, 08:11
Το avatar του χρήστη Tasos
Διαχειριστής
Όνομα: Τάσος Φιλοξενιδης
Έκδοση λογισμικού Office: Ms-Office 365
Γλώσσα λογισμικού Office: Ελληνική, Αγγλική, Γερμανική
 
Εγγραφή: 21-10-2009
Μηνύματα: 2.011
Προεπιλογή

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

Γιώργο, ένα κοινό ερώτημα επιλογής, μπορεί να επεξεργαστεί κριτήρια όπως [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 να περάσουμε τις παραμέτρους προγραμματιστικά.

Φιλικά

Τάσος
__________________
Ms-Office Development Team
Ανάπτυξη επαγγελματικών εφαρμογών
Απάντηση με παράθεση
  #6  
Παλιά 31-08-10, 09:14
Όνομα: Γιώργος
Έκδοση λογισμικού Office: Ms-Office 2010
Γλώσσα λογισμικού Office: Ελληνική, Αγγλική
 
Εγγραφή: 18-06-2010
Μηνύματα: 3.674
Προεπιλογή

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

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

Φιλικά/Γιώργος
Απάντηση με παράθεση
  #7  
Παλιά 01-09-10, 10:15
Όνομα: Πάνος
Έκδοση λογισμικού Office: Ms-Office 2007
Γλώσσα λογισμικού Office: Ελληνική
 
Εγγραφή: 05-02-2010
Περιοχή: Αττική
Μηνύματα: 163
Προεπιλογή Δημιουργία έκθεσης μετά απο εισαγωγή φίλτρου σε ερώτημα διασταύρωσης

Τάσο,
Καλημέρα
ξέρεις γιατί από το ερώτημα διασταύρωσης δεν μπορώ να φτιάξω έκθεση;
Σε ευχαριστώ εκ των προτέρων.
Πάνος
Συνημμένα Αρχεία
Τύπος Αρχείου: accdb ΕΡΩΤΗΜΑ ΔΙΑΣΤΑΥΡΩΣΗΣ.accdb (448,0 KB, 4 εμφανίσεις)
Απάντηση με παράθεση
  #8  
Παλιά 01-09-10, 13:33
Το avatar του χρήστη Tasos
Διαχειριστής
Όνομα: Τάσος Φιλοξενιδης
Έκδοση λογισμικού Office: Ms-Office 365
Γλώσσα λογισμικού Office: Ελληνική, Αγγλική, Γερμανική
 
Εγγραφή: 21-10-2009
Μηνύματα: 2.011
Προεπιλογή

Καλησπέρα σε όλους!
Πάνο, τα πεδία ενός ερωτήματος Διαστάυρωσης δεν είναι αποθηκευμένα με αποτέλεσμα
ο οδηγός εκθέσεων να μην βρίσκει πεδία για να σου φτιάξει την έκθεση.
Μπορείς να περάσεις τον παρακάτω κώδικα 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 ("ΑΛΦΑ","ΒΗΤΑ","ΓΑΜΑ","ΔΕΛΤΑ","ΕΨΙΛΟΝ");
Ελπίζω να σε καλύπτει!

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

Τάσος
__________________
Ms-Office Development Team
Ανάπτυξη επαγγελματικών εφαρμογών
Απάντηση με παράθεση
  #9  
Παλιά 01-09-10, 14:06
Όνομα: Πάνος
Έκδοση λογισμικού Office: Ms-Office 2007
Γλώσσα λογισμικού Office: Ελληνική
 
Εγγραφή: 05-02-2010
Περιοχή: Αττική
Μηνύματα: 163
Προεπιλογή

Τάσε,
είσαι καταπληκτικός
Τα λέμε
Πάνος
Απάντηση με παράθεση
  #10  
Παλιά 01-09-10, 19:34
Όνομα: Γιώργος
Έκδοση λογισμικού Office: Ms-Office 2010
Γλώσσα λογισμικού Office: Ελληνική, Αγγλική
 
Εγγραφή: 18-06-2010
Μηνύματα: 3.674
Προεπιλογή

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

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

Φιλικά/Γιώργος
Απάντηση με παράθεση
Απάντηση στο θέμα


Δικαιώματα - Επιλογές
Δε μπορείτε να δημοσιεύσετε νέα μηνύματα
Δε μπορείτε να δημοσιεύσετε απαντήσεις
Δεν μπορείτε να επισυνάψετε αρχεία
Δεν μπορείτε να επεξεργαστείτε τα μηνύματα σας

Ο κώδικας ΒΒ είναι σε λειτουργία
Τα Smilies είναι σε λειτουργία
Ο κώδικας [IMG] είναι σε λειτουργία
Ο κώδικας HTML είναι εκτός λειτουργίας
Trackbacks are εκτός λειτουργίας
Pingbacks are εκτός λειτουργίας
Refbacks are εκτός λειτουργίας


Παρόμοια Θέματα

Θέμα Δημιουργός Forum Απαντήσεις Τελευταίο Μήνυμα
Ερώτημα με φίλτρο ανά λέξη γιώργοςΚ Access - Ερωτήσεις / Απαντήσεις 4 26-05-15 20:00
[ Ερωτήματα ] Φίλτρο σε ερώτημα nasos23 Access - Ερωτήσεις / Απαντήσεις 5 14-12-13 16:58
[Γενικά] Φίλτρο xristos Excel - Ερωτήσεις / Απαντήσεις 5 15-09-12 17:30
Φίλτρο Χρήστος Access - Ερωτήσεις / Απαντήσεις 2 06-05-11 13:48
[ Ερωτήματα ] Eρώτημα διασταύρωσης manos77 Access - Ερωτήσεις / Απαντήσεις 3 09-08-10 23:21


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