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/940-boitheia-gia-dimioyrgia-erotimatos-i-ekthesis.html)

nasos23 26-01-11 23:12

Βοήθεια για δημιουργία ερωτήματος ή έκθεσης
 
1 Συνημμένο(α)
Καλησπέρα

Ως μέτριος γνώστης της access,
ζητώ τη βοήθειά σας αν είναι δυνατόν σχετικά με ένα θέμα που με απασχολεί.
Σε ένα πίνακα έχω τα εξής δεδομένα: ΚωδΑσθενούς είσοδος έξοδος Νοσηλευόμενος: Ναι/Οχι
πχ
Κώδικας:

ΚωδΑσθενούς        είσοδος                έξοδος          Νοσηλευόμενος

  1868              1/10/2010                      Ναι
  1918              12/5/2010      13/1/2011      Οχι

Θα ήθελα σε ένα ερώτημα ή έκθεση να μου εμφανίζει τη μηνιαία δύναμη ασθενών κατα φθίνουσα
ή αύξουσα σειρά μηνός δηλ. κάπως έτσι:
Κώδικας:

ΚωδΑσθενούς        είσοδος,        έξοδος,          Νοσηλευόμενος,    Μήνας

  1918              12/5/2010      13/1/2011      Οχι        01/11
  1868              1/10/2010                      Ναι*        01/11   
  1918              12/5/2010      13/1/2011      Οχι        12/10
  1868              1/10/2010                      Ναι*        12/10
  1918              12/5/2010      13/1/2011      Οχι        11/10
  1868              1/10/2010                      Ναι*        11/10
  1918              12/5/2010      13/1/2011      Οχι        10/10
  1868              1/10/2010                      Ναι*        10/10
  1918              12/5/2010      13/1/2011      Οχι        09/10
  1918              12/5/2010      13/1/2011      Οχι        08/10
  1918              12/5/2010      13/1/2011      Οχι        07/10
  1918              12/5/2010      13/1/2011      Οχι        06/10
  1918              12/5/2010      13/1/2011      Οχι        05/10  κοκ
(*) Θεωρούμε ημερομνία εξόδου  τον τρέχοντα μήνα.

Εφαρμόζοντας κάποια φίλτρα για το μήνα δηλ απο #10/10# έως #10/10# να μου εμφανίζει τη δύναμη
(νοσηλευόμενοι ασθενείς) του συγκεκριμένου μήνα.

Σημ. Ελπίζω στη βοήθειά σας αν έγινα κατανοητός.

Ευχαριστώ.

Επισυνάπτω πίνακα.

kapetang 27-01-11 15:10

1 Συνημμένο(α)
Καλημέρα

Νάσο, η ΒΔ που επισυνάπτω, αποτελεί μια επέκταση της δικής σου:
1. Πρόσθεσα ένα παραμετρικό ερώτημα «qryEnterExit», που προσομοιώνει το ζητούμενο.
Αν θέλουμε να πάρουμε στοιχεία για το 2010 και τους μήνες Αύγουστο μέχρι και Οκτώβριο, πρέπει να δώσουμε για την πρώτη παράμετρο: 10/08 και για τη δεύτερη: 10/10.
Αν θέλουμε να πάρουμε όλες τις εγγραφές, μπορούνε να δώσουμε στην πρώτη παράμετρο: 0 (μηδέν) και στη δεύτερη: α.
2. Πρόσθεσα επίσης και μία φόρμα σε προβολή συγκεντρωτικού πίνακα «frmEnterExitPivotTable», που λόγω της ευελιξίας στην εφαρμογή φίλτρων, πιστεύω ότι σε καλύπτει καλύτερα.

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

Tasos 27-01-11 18:09

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

Η δική μου πρόταση:

Δημιουργούμε ένα ερώτημα με το όνομα: QryStrDates

Κώδικας:

SELECT [ΕΙΣΟΔΟΣ ΕΞΟΔΟΣ].ID,
[ΕΙΣΟΔΟΣ ΕΞΟΔΟΣ].ΚωδΑσθενούς,
[ΕΙΣΟΔΟΣ ΕΞΟΔΟΣ].είσοδος,
[ΕΙΣΟΔΟΣ ΕΞΟΔΟΣ].έξοδος,
[ΕΙΣΟΔΟΣ ΕΞΟΔΟΣ].Νοσηλευόμενος,
[Δώσε Ημερομηνία από (Μορφή: MMEE)] AS StartDate,
[Δώσε Ημερομηνία μέχρι  (Μορφή: MMEE)] AS EndDate
FROM [ΕΙΣΟΔΟΣ ΕΞΟΔΟΣ];

Κατόπιν δημιουργούμε μία Έκθεση χρησιμοποιώντας τον Οδηγό Εκθέσεων βασισμένο στον
πίνακα "ΕΙΣΟΔΟΣ ΕΞΟΔΟΣ" όπου προσθέτουμε ένα επίπεδο ομαδοποίησης με βάση το πεδίο
"είσοδος".
Αφού δημιουργήσουμε την Έκθεση, περνάμε σε Προβολή σχεδίασης και στο πεδίο "Προέλευση Εγγραφών" της Έκθεσης περνάμε το παρακάτω:

Κώδικας:

SELECT QryStrDates.ID,
QryStrDates.ΚωδΑσθενούς,
QryStrDates.είσοδος,
QryStrDates.έξοδος,
QryStrDates.Νοσηλευόμενος
FROM QryStrDates
WHERE (((Month([είσοδος]))>=Left([StartDate],2) And (Month([είσοδος]))<=Left([EndDate],2))
AND ((Right(Year([είσοδος]),2))>=Right([StartDate],2) And (Right(Year([είσοδος]),2))<=Right([EndDate],2)))
OR
(((QryStrDates.StartDate) Is Null) AND ((QryStrDates.EndDate) Is Null));

Επιτρέπει την παράκαμψη των παραμέτρων Από - Έως πατώντας απλά Enter σε περίπτωση που θέλουμε να εμφανίσουμε όλα τα δεδομένα.
Η μορφοποίηση των τιμών στις παραμέτρους θα πρέπει να είναι "ΜΜΕΕ" ( για περισσότερη ευκολία κατά την πληκτρολόγηση αλλά και ανεξαρτησία από τη μορφοποίηση της ημερομηνίας του υπολογιστή ).

Φιλικά

Τάσος

nasos23 27-01-11 23:49

1 Συνημμένο(α)
Καλημέρα
Γιώργο και Τάσο ευχαριστώ για την άμεση απάντησή σας στο θέμα μου.
Εφτιαξα λοιπόν ένα ερώτημα συννένωσης που νομίζω με εξυπηρετεί για να μπορώ να έχω όλες τις
εγγραφές.
Δηλ όχι μόνο την είσοδο και την έξοδο των ασθενών του μήνα αλλά και τους ασθενείς που εισήλθαν πριν απ' αυτόν και παραμένουν νοσηλευόμενοι.
Πχ Για το μήνα Οκτώβριο 2010
Κώδικας:

SELECT [ΕΙΣΟΔΟΣ ΕΞΟΔΟΣ].ΚωδΑσθενούς, [ΕΙΣΟΔΟΣ ΕΞΟΔΟΣ].είσοδος, [ΕΙΣΟΔΟΣ ΕΞΟΔΟΣ].έξοδος,
[ΕΙΣΟΔΟΣ ΕΞΟΔΟΣ].Νοσηλευόμενος, Format([είσοδος],"mm/yy") AS Μήνας
FROM [ΕΙΣΟΔΟΣ ΕΞΟΔΟΣ]
WHERE (((Format([έξοδος],"yy/mm")) Between [Δώσε την αρχή  σε μορφή: εε/μμ] And [Δώσε το τέλος  σε μορφή: εε/μμ]))
ORDER BY [ΕΙΣΟΔΟΣ ΕΞΟΔΟΣ].έξοδος DESC;
union SELECT [ΕΙΣΟΔΟΣ ΕΞΟΔΟΣ].ΚωδΑσθενούς, [ΕΙΣΟΔΟΣ ΕΞΟΔΟΣ].είσοδος, [ΕΙΣΟΔΟΣ ΕΞΟΔΟΣ].έξοδος,
 [ΕΙΣΟΔΟΣ ΕΞΟΔΟΣ].Νοσηλευόμενος, Format([είσοδος],"mm/yy") AS Μήνας
FROM [ΕΙΣΟΔΟΣ ΕΞΟΔΟΣ]
WHERE (((Format([είσοδος],"yy/mm")) Between [Δώσε την αρχή  σε μορφή: εε/μμ] And [Δώσε το τέλος  σε μορφή: εε/μμ]))
ORDER BY [ΕΙΣΟΔΟΣ ΕΞΟΔΟΣ].είσοδος DESC;
UNION SELECT [ΕΙΣΟΔΟΣ ΕΞΟΔΟΣ].ΚωδΑσθενούς, [ΕΙΣΟΔΟΣ ΕΞΟΔΟΣ].είσοδος, [ΕΙΣΟΔΟΣ ΕΞΟΔΟΣ].έξοδος,
[ΕΙΣΟΔΟΣ ΕΞΟΔΟΣ].Νοσηλευόμενος, Format([είσοδος],"mm/yy") AS Μήνας
FROM [ΕΙΣΟΔΟΣ ΕΞΟΔΟΣ]
WHERE ((([ΕΙΣΟΔΟΣ ΕΞΟΔΟΣ].είσοδος)<#10/1/2010#) AND (([ΕΙΣΟΔΟΣ ΕΞΟΔΟΣ].Νοσηλευόμενος)=Yes))
ORDER BY [ΕΙΣΟΔΟΣ ΕΞΟΔΟΣ].είσοδος DESC;

Αλλά θα ήθελα τα φώτα σας στο συγκεκριμένο φίλτρο
WHERE ((([ΕΙΣΟΔΟΣ ΕΞΟΔΟΣ].είσοδος)<#10/1/2010#) να μου ανοίγει ένα πλαίσιο οπου θα πληκτρολογώ την ημερομηνία αντί να ανοίγω κάθε φορά το ερώτημα
σε προβολή σχεδίασης.

Ευχαριστώ πολύ και συγγνώμη αν σας κούρασα

Φιλικά Νάσος

Επισυνάπτω ξανά τη φόρμα

kapetang 28-01-11 10:40

Καλημέρα

Νάσο, σχετικά με τη ΒΔ που δημιουργείς:
  1. Δεν κατάλαβα γιατί δεν καταχωρείται η ακριβής ημερομηνία εξόδου για όλους τους ασθενείς είτε νοσηλεύονται είτε όχι. Αν κάποιος νοσηλευτεί από 30/10/2010 μέχρι 2/12/2010, ποια θεωρείται ημερομηνία εξόδου;
  2. Είναι κακή ιδέα να χρησιμοποιούμε δύο ψηφία για το έτος και να βάζουμε το μήνα πριν από το έτος. Δεν ξέρω γιατί τα διάλεξες ,αλλά μπορεί να δημιουργήσουν προβλήματα σε φίλτρα και ταξινομήσεις. Για παράδειγμα ενώ 2000>1999 έχουμε 00<99. Επίσης ενώ 2010/01>2009/12, έχουμε 12/2009>01/2010.
  3. Το ερώτημα ένωσης θα μπορούσε να αντικατασταθεί από το παρακάτω:
Κώδικας:

SELECT [ΕΙΣΟΔΟΣ ΕΞΟΔΟΣ].ΚωδΑσθενούς, [ΕΙΣΟΔΟΣ ΕΞΟΔΟΣ].είσοδος, [ΕΙΣΟΔΟΣ ΕΞΟΔΟΣ].έξοδος, [ΕΙΣΟΔΟΣ ΕΞΟΔΟΣ].Νοσηλευόμενος,
Format([είσοδος],"mm/yy") AS Μήνας
FROM [ΕΙΣΟΔΟΣ ΕΞΟΔΟΣ]
WHERE (((Format([είσοδος],"yy/mm")) Between [Δώσε την αρχή  σε μορφή: εε/μμ] And [Δώσε το τέλος  σε μορφή: εε/μμ]))
OR ((([ΕΙΣΟΔΟΣ ΕΞΟΔΟΣ].είσοδος)<[Δώσε ημερομηνία νοσιλευόμενων στη μορφή: ηη/μμ/εεεε]) AND
(([ΕΙΣΟΔΟΣ ΕΞΟΔΟΣ].Νοσηλευόμενος)=-1))
ORDER BY [ΕΙΣΟΔΟΣ ΕΞΟΔΟΣ].είσοδος DESC;

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

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

Tasos 28-01-11 11:16

1 Συνημμένο(α)
Καλημέρα Γιώργο και Νάσο!
Με αφορμή το ζητούμενο του Νάσου, έφτιαξα μια παραδειγματική εφαρμογή (που είμαι σίγουρος ότι θα χρησιμεύσει σε πολλούς) όπου μπορεί κανείς μέσα από φόρμα να φιλτράρει δεδομένα με πολλαπλά κριτήρια τόσο στη φόρμα, όσο και σε Έκθεση.
Δείτε την στο συνημμένο.

Φιλικά
Τάσος

nasos23 28-01-11 18:34

Παράθεση:

kapetang
1.Δεν κατάλαβα γιατί δεν καταχωρείται η ακριβής ημερομηνία εξόδου για όλους τους ασθενείς είτε νοσηλεύονται είτε όχι. Αν κάποιος νοσηλευτεί από 30/10/2010 μέχρι 2/12/2010, ποια θεωρείται ημερομηνία εξόδου;
Φίλε Γιώργο θα προσπαθήσω να γίνω πιο σαφής.
Εφόσον ο ασθενής παραμένει νοσηλευόμενος δεν μπορεί να καταχωρηθεί ημερ/νία εξόδου.
Η 2/12/2010 είναι η ημερομηνία εξόδου.
Παράθεση:

2.Είναι κακή ιδέα να χρησιμοποιούμε δύο ψηφία για το έτος και να βάζουμε το μήνα πριν από το έτος. Δεν ξέρω γιατί τα διάλεξες ,αλλά μπορεί να δημιουργήσουν προβλήματα σε φίλτρα και ταξινομήσεις. Για παράδειγμα ενώ 2000>1999 έχουμε 00<99. Επίσης ενώ 2010/01>2009/12, έχουμε 12/2009>01/2010.
Η ημερομηνία έχει διορθωθεί έτος/μήνας
Παράθεση:

3.Αλλά δεν ξέρω τι εξυπηρετεί αν εμφανίσουμε μαζί με αυτούς που έκαναν εισαγωγή μέσα σε κάποιο μήνα και αυτούς που νοσηλεύτηκαν πριν από μία ημερομηνία οι οποίοι μπορεί να έκαναν εισαγωγή πριν από 5 χρόνια.
Το ζητούμενο για μένα είναι να μπορώ να έχω ανα πάσα στιγμή ένα κατάλογο νοσηλευομένων οποιουδήποτε μήνα και έτους.Π.χ το Μάη του 2004 πόσοι και ποιοί ασθενείς νοσηλεύθηκαν.
Θεώρησέ το σαν μηνιαία στατιστική.
Το ερώτημα συνένωσης που χρησιμοποιώ δεν ανταποκρίνεται 100% στα δεδομένα γιατί ένας ασθενής που εισήλθε τον προηγούμενο μήνα και εξήλθε τον επόμενο απο τον ζητούμενο πιθανό να μην εμφανιστεί στις εγγραφές.
Μία σκέψη για μένα είναι η καθημερινή λογοδοσία (Ημερήσια κατάσταση ασθενών), που είναι εύκολο να το κάνω αλλά προβληματίζομαι για τον όγκο των δεδομένων γι αυτό ζήτησα τη βοήθεια του φόρουμ
Και πάλι σ' ευχαριστώ

Νάσος

nasos23 28-01-11 18:40

Φίλε Τάσο
Με μιά ματιά που έριξα στην εφαρμογή την είδα πολύ ενδιαφέρουσα.

Θα τη μελετήσω.

Ευχαριστώ.

Νάσος

kapetang 28-01-11 21:05

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

Φίλε Τάσο έκανες πολύ καλή δουλειά.
Νάσο, ίσως άρχισα να καταλαβαίνω.
Για τον ασθενή «ΑΑΑ» γνωρίζουμε αρχικά και καταχωρούμε την ημερομηνία εισόδου. Μέχρι να πάρει εξιτήριο ανήκει στην κατηγορία «νοσηλευόμενος» και η ημερομηνία εξόδου είναι κενή.
Μόλις πάρει εξιτήριο ο «ΑΑΑ» καταχωρούμε την ημερομηνία εξόδου και του αλλάζουμε και κατηγορία τον κατατάσσουμε στους «μη νοσηλευόμενους».
Με την παραπάνω λογική, αν σήμερα, κοιτάξω τη λίστα των ασθενών, ξέρω αμέσως ότι όσοι ασθενείς έχουν κενή την ημερομηνία εξόδου νοσηλεύονται και όσοι όχι πήραν εξιτήριο, δηλαδή είναι πλεονασμός η κατηγορία «νοσηλευόμενος» και «μη νοσηλευόμενος».
Θέλω τους ασθενείς που νοσηλεύτηκαν σε ένα συγκεκριμένο μήνα (έτος/ μήνας).
Σ’ αυτούς περιλαμβάνονται:
1. Όσοι εισήχθηκαν αυτό το μήνα
2. Όσοι πήραν εξιτήριο αυτό το μήνα (ανεξάρτητα από την ημερομηνία εισόδου).
3.Όσοι εισήχθηκαν πριν απ’ αυτόν το μήνα και εξακολουθούν να νοσηλεύονται (ημερομηνία εξόδου κενή) ή η ημερομηνία εξόδου καλύπτει το μήνα.
Αν έτσι είναι, δες το παρακάτω ερώτημα που βασίζεται στον πίνακα του Τάσου.
Κώδικας:

SELECT tblActivities.ID, tblActivities.PatID, tblActivities.PatEntryDate,
tblActivities.PatExitDate, tblActivities.PatHasBed
FROM tblActivities
WHERE ((Format([patEntryDate],"yyyy/mm")=[Δώσε το μήνα σε μορφή: εεεε/μμ])) OR
((Format(nz([PatExitDate],0),"yyyy/mm")=[Δώσε το μήνα σε μορφή: εεεε/μμ])) OR
((Format([patEntryDate],"yyyy/mm")<[Δώσε το μήνα σε μορφή: εεεε/μμ]) AND
 (Format(nz([PatExitDate],#31/12/9999#),"yyyy/mm")>=[Δώσε το μήνα σε μορφή: εεεε/μμ]))
ORDER BY tblActivities.PatEntryDate DESC;

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

nasos23 29-01-11 10:54

:omg2::respect:
Άφωνος!!!!!!!!
Γιώργο και Τάσο δεν βρίσκω λόγια να σας ευχαριστήσω.
Είναι ακριβώς αυτό που ζητούσα
:thanks:

Νάσος


Η ώρα είναι 15:54.

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


Search Engine Optimization by vBSEO 3.3.2