k33theod Δημοσ. 9 Φεβρουαρίου 2022 Δημοσ. 9 Φεβρουαρίου 2022 Πρέπει να δεις λίγο την sql language. Σε μία databank θεωρείται λάθος να τηρείς κάπου διπλά δεδομένα. Όλα γράφονται μία φορά και ότι πληροφορία θες την πέρνεις με query συνάρτηση klp. Oπότε δεν ενημερώνεις την τιμή του total, κάθε φορά που το ζητάς ενημερώνεται για το συγκεκριμένο query. To επόμενο δευτερόλεπτο μπορεί να είναι κάτι άλλο γιατί άλλαξε μια εγγράφη. Στην προκειμένη περίπτωση θέλεις την sum Χονδρικά λοιπών select sum(income) as total_income, sum(outcome) as total_outcome from ... where .. group by ... having ... bla bla bla Αν έχεις χρόνο ασχολείσου είναι ότι καλύτερο 1
Moderators Spect~ Δημοσ. 9 Φεβρουαρίου 2022 Μέλος Moderators Δημοσ. 9 Φεβρουαρίου 2022 3 ώρες πριν, k33theod είπε Πρέπει να δεις λίγο την sql language. Σε μία databank θεωρείται λάθος να τηρείς κάπου διπλά δεδομένα. Όλα γράφονται μία φορά και ότι πληροφορία θες την πέρνεις με query συνάρτηση klp. Oπότε δεν ενημερώνεις την τιμή του total, κάθε φορά που το ζητάς ενημερώνεται για το συγκεκριμένο query. To επόμενο δευτερόλεπτο μπορεί να είναι κάτι άλλο γιατί άλλαξε μια εγγράφη. Στην προκειμένη περίπτωση θέλεις την sum Χονδρικά λοιπών select sum(income) as total_income, sum(outcome) as total_outcome from ... where .. group by ... having ... bla bla bla Αν έχεις χρόνο ασχολείσου είναι ότι καλύτερο Ναι το σκεφτόμουν αυτό που λες ότι απλά τα βρίσκεις επιτόπου με ένα query και δεν χρειάζεται να τα έχω σε πίνακα. Καλά δεν θα μου χρειαστεί κάπου ή γνώση αυτή απλά είπα να παίξω λίγο
Moderators Spect~ Δημοσ. 10 Φεβρουαρίου 2022 Μέλος Moderators Δημοσ. 10 Φεβρουαρίου 2022 Επαιξα λιγο χτες το βραδυ. Για καποιο λογο, που μαλλον φταιω εγω, οταν εκανα Select SUM(income.amount) as totalInc, SUM(outcome.amount) as totalOut) FROM Income, Outcome Το αθροισμα στο income ηταν λαθος. Γενικα ειναι πιο ανετο ως προς την καταχωρηση αλλα το θεωρω πιο "δυσκολο" για να τραβηξεις τις πληροφοριες που θελεις.
MastroGiannis Δημοσ. 10 Φεβρουαρίου 2022 Δημοσ. 10 Φεβρουαρίου 2022 10 ώρες πριν, Spect~ είπε FROM Income, Outcome Με αυτόν τον τρόπο δημιουργείς το λεγόμενο καρτεσιανό γινόμενο και λογικό είναι να παίρνεις λάθος αθροίσματα. Τρέξε το ερώτημα δίχως τις SUM να δεις πόσες εγγραφές επιστρέφει. Για να πάρεις ένα αποτέλεσμα σε μορφή spreadsheet, για κάθε πεδίο απαιτείται ένα υποερώτημα (ή μια DSUM), όπως παρακάτω: SELECT TOP 1 (SELECT Sum([Amount]) AS sumIncome FROM Income) AS totIn, (SELECT Sum([Amount]) AS sumOutcome FROM Outcome) AS totOut, (SELECT Sum([Amount]) AS sumIncome FROM Income)- (SELECT Sum([Amount]) AS sumOutcome FROM Outcome) as Rest FROM Income; Έτσι όμως παίρνεις το σύνολο όλου του πίνακα. Συνήθως τα αθροίσματα ομαδοποιούνται με βάση κάποιο άλλο πεδίο του πίνακα και τα αποτελέσματα είναι εγγραφές, όχι πεδία. Αφού διατηρείς τις κινήσεις σε διαφορετικούς πίνακες, αποθήκευσε το παρακάτω ερώτημα που τους εννοποιεί ως qunInOut: SELECT Income.Amount, 'Income' AS flow FROM Income UNION ALL SELECT Outcome.Amount, 'Outcome' AS flow FROM Outcome; (Το πεδίο flow καθορίζει το είδος της κίνησης. Φυσικά, εκτός από το Amount μπορείς να πάρεις κι άλλα κοινά πεδία των πινάκων) Στη συνέχεια, με το παρακάτω ερώτημα, παίρνεις τα σύνολα ομαδοποιημένα κατά το πεδίο flow: SELECT Sum(Amount) AS sumInOut, flow FROM qunInOut GROUP BY flow; Το σημαντικότερο απ' όλα είναι να στηθεί σωστά το σχήμα της βάσης. Μετά, η άντληση της πληροφορίας είναι εύκολη και η πληροφορία σωστή. Σου φαίνεται δύσκολο γιατί έχεις ακόμα στο μυαλό τη δομή φύλλου εργασίας και όχι πίνακα δεδομένων. Καλή συνέχεια! 1
Moderators Spect~ Δημοσ. 11 Φεβρουαρίου 2022 Μέλος Moderators Δημοσ. 11 Φεβρουαρίου 2022 11 ώρες πριν, MastroGiannis είπε Με αυτόν τον τρόπο δημιουργείς το λεγόμενο καρτεσιανό γινόμενο και λογικό είναι να παίρνεις λάθος αθροίσματα. Τρέξε το ερώτημα δίχως τις SUM να δεις πόσες εγγραφές επιστρέφει. Για να πάρεις ένα αποτέλεσμα σε μορφή spreadsheet, για κάθε πεδίο απαιτείται ένα υποερώτημα (ή μια DSUM), όπως παρακάτω: SELECT TOP 1 (SELECT Sum([Amount]) AS sumIncome FROM Income) AS totIn, (SELECT Sum([Amount]) AS sumOutcome FROM Outcome) AS totOut, (SELECT Sum([Amount]) AS sumIncome FROM Income)- (SELECT Sum([Amount]) AS sumOutcome FROM Outcome) as Rest FROM Income; Έτσι όμως παίρνεις το σύνολο όλου του πίνακα. Συνήθως τα αθροίσματα ομαδοποιούνται με βάση κάποιο άλλο πεδίο του πίνακα και τα αποτελέσματα είναι εγγραφές, όχι πεδία. Αφού διατηρείς τις κινήσεις σε διαφορετικούς πίνακες, αποθήκευσε το παρακάτω ερώτημα που τους εννοποιεί ως qunInOut: SELECT Income.Amount, 'Income' AS flow FROM Income UNION ALL SELECT Outcome.Amount, 'Outcome' AS flow FROM Outcome; (Το πεδίο flow καθορίζει το είδος της κίνησης. Φυσικά, εκτός από το Amount μπορείς να πάρεις κι άλλα κοινά πεδία των πινάκων) Στη συνέχεια, με το παρακάτω ερώτημα, παίρνεις τα σύνολα ομαδοποιημένα κατά το πεδίο flow: SELECT Sum(Amount) AS sumInOut, flow FROM qunInOut GROUP BY flow; Το σημαντικότερο απ' όλα είναι να στηθεί σωστά το σχήμα της βάσης. Μετά, η άντληση της πληροφορίας είναι εύκολη και η πληροφορία σωστή. Σου φαίνεται δύσκολο γιατί έχεις ακόμα στο μυαλό τη δομή φύλλου εργασίας και όχι πίνακα δεδομένων. Καλή συνέχεια! Αν και μιλαμε για θεωρητικο επιπεδο παντα γιατι ο μονος λογος που το εφτιαξα στην Access ειναι για να παιξω. Η βαση εχει υπερβολικα απλη μορφη και δυσκολο να γινει λαθος. Δηλαδη ΕΣΟΔΑ, ΕΞΟΔΑ, ΣΥΝΕΡΓΑΤΕΣ. Καθε ενας πινακας με το κλειδι του και η μονη σχεση τους ειναι οτι σε ενα πεδιο αντλει την πληροφορια απο τον πινακα με τους ΣΥΝΕΡΓΑΤΕΣ αρα αυτο εινα οκ. Δυσκολο μου φαινεται γιατι εχω να ασχοληθω με βασεις απο το 3ο ετος πριν περιπου 10 χρονια οποτε η εμπειρια με τα query ειναι μηδενικη. Η λογικη ή η δομη ειναι ευκολη για ενα απλο query αλλα οταν θες κατι πιο "συνθετο" τοτε μπερδευει το πραγμα. Θα μαρεσε αν η access ειχε 2 πραγματα. 1) Να μπορεις να φτιαξεις μια φορμα που θα ανοιγει αυτονομα (χωρις δηλαδη να χρειαζεται να ανοιξεις την Access) για την καταχωρηση αλλα η φορμα αυτη να φτιαχνεται μεσα απο το προγραμμα της Access και χωρις να χρειαζεται οτιδηποτε αλλο για να τρεξει 2) GUI για την δημιουργια συνθετων query. Που σε ενα βαθμο εχει απο οτι ειδα αλλα δεν ειναι user friendly. Με το user friendly αναφερομαι σε εναν απλο χρηστη και οχι σε αυτον που εστησε τη βαση
Προτεινόμενες αναρτήσεις
Δημιουργήστε ένα λογαριασμό ή συνδεθείτε για να σχολιάσετε
Πρέπει να είστε μέλος για να αφήσετε σχόλιο
Δημιουργία λογαριασμού
Εγγραφείτε με νέο λογαριασμό στην κοινότητα μας. Είναι πανεύκολο!
Δημιουργία νέου λογαριασμούΣύνδεση
Έχετε ήδη λογαριασμό; Συνδεθείτε εδώ.
Συνδεθείτε τώρα