Προς το περιεχόμενο

Προτεινόμενες αναρτήσεις

Δημοσ.

Πρέπει να δεις λίγο την 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

Αν έχεις χρόνο ασχολείσου είναι ότι καλύτερο

  • Like 1
  • Απαντ. 34
  • Δημ.
  • Τελ. απάντηση

Συχνή συμμετοχή στο θέμα

  • Moderators
Δημοσ.
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
Δημοσ.

Επαιξα λιγο χτες το βραδυ. Για καποιο λογο, που μαλλον φταιω εγω, οταν εκανα

Select SUM(income.amount) as totalInc, SUM(outcome.amount) as totalOut) FROM Income, Outcome

Το αθροισμα στο income ηταν λαθος. Γενικα ειναι πιο ανετο ως προς την καταχωρηση αλλα το θεωρω πιο "δυσκολο" για να τραβηξεις τις πληροφοριες που θελεις. 

Δημοσ.
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;

Το σημαντικότερο απ' όλα είναι να στηθεί σωστά το σχήμα της βάσης. Μετά, η άντληση της πληροφορίας είναι εύκολη και η πληροφορία σωστή. Σου φαίνεται δύσκολο γιατί έχεις ακόμα στο μυαλό τη δομή φύλλου εργασίας και όχι πίνακα δεδομένων.

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

 

 

 

 

 

  • Like 1
  • Moderators
Δημοσ.
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 χρονια :P οποτε η εμπειρια με τα query ειναι μηδενικη. Η λογικη  ή η δομη ειναι ευκολη για ενα απλο query αλλα οταν θες κατι πιο "συνθετο" τοτε μπερδευει το πραγμα. 

Θα μαρεσε αν η access ειχε 2 πραγματα. 

1) Να μπορεις να φτιαξεις μια φορμα που θα ανοιγει αυτονομα (χωρις δηλαδη να χρειαζεται να ανοιξεις την Access) για την καταχωρηση αλλα η φορμα αυτη να φτιαχνεται μεσα απο το προγραμμα της Access και χωρις να χρειαζεται οτιδηποτε αλλο για να τρεξει

2) GUI για την δημιουργια συνθετων query. Που σε ενα βαθμο εχει απο οτι ειδα αλλα δεν ειναι user friendly. Με το user friendly αναφερομαι σε εναν απλο χρηστη και οχι σε αυτον που εστησε τη βαση

Δημιουργήστε ένα λογαριασμό ή συνδεθείτε για να σχολιάσετε

Πρέπει να είστε μέλος για να αφήσετε σχόλιο

Δημιουργία λογαριασμού

Εγγραφείτε με νέο λογαριασμό στην κοινότητα μας. Είναι πανεύκολο!

Δημιουργία νέου λογαριασμού

Σύνδεση

Έχετε ήδη λογαριασμό; Συνδεθείτε εδώ.

Συνδεθείτε τώρα

  • Δημιουργία νέου...