![]() |
Σύνθεση 2 πεδίων και κατανομή θέσεων 2 Συνημμένο(α) Καλησπέρα και χρόνια σας πολλά. Στο παράδειγμα που ανεβάζω έχω 2 θέματα να αντιμετωπίσω. 1)Στους πίνακες NAMES και ΝΑΤΙΟΝ υπάρχουν τα πεδία GR_NAT, AITHSH ΚΑΙ ID. Πως μπορούμε να πάρουμε τα δεδομένα από τα 2 πεδία GR_NAT και AITHSH και να τα συνθέσουμε στο πεδίο ID. Έστω GR_NAT τα 2 αρχικά γράμματα του έθνους π.χ. GR από ΕΛΛΑΔΑ και AITHSH ο αριθμός αίτησης 3 ψηφίων π.χ 085. Το ID να γίνει αυτόματα GR085. 2)Στην έκθεση υπάρχει το πεδίο POS το οποίο αφορά την τελική κατάταξη που θα έχει ο συμμετέχον.Πως μπορούμε ανάλογα την βαθμολογία να παίρνουν την θέση(1η, 2η κλπ).Αλλά όταν υπάρχει ισοψηφία π.χ στους δύο πρώτους θα παίρνουν και οι 2 την 1η θέση(αριθμό 1 στην έκθεση).Το έχω σημειώσει με κόκκινο στο sample. |
Το 1ο ερώτημα το έλυσα με ερώτημα και τύπο [...]& " "&[....]. |
1 Συνημμένο(α) Καλημέρα σε όλους. Σάκη δες το συνημμένο |
1 Συνημμένο(α) Καλημέρα, αυτό είναι Naso. Εγώ υλοποίησα το ζητούμενο σε excel στο αρχείο που επισυνάπτω και έψαχνα λύση στην access την οποία μου έδωσες. Ευχαριστώ |
Να είσαι καλά. |
1 Συνημμένο(α) Καλησπέρα, εξελίσσοντας λίγο την βάση προέκυψε ενα θέμα με τα σύνολα. Πως γίνεται να παίρνω στο πεδίο TOTAL στο ερώτημα QR_RANKcateg το σύνολο από τα 3 μεγαλύτερα σκορ ανά κατηγορία και όχι από όλα τα σκορ; |
Στο excel θα χρησιμοποιούσα την συνάρτηση =SUMPRODUCT(LARGE([SCORE1];ROW(INDIRECT("1:3")))) στην access πως θα μπορούσε να συνταχθεί; |
Καλησπέρα Σάκη Παράθεση:
1. Δημιουργούμε ένα ερώτημα συνένωσης. πχ."UNION_SCORE" Κώδικας: SELECT SIGNUP.ID_SIGN, SIGNUP.CATEGORY, SIGNUP.NAMES, SIGNUP.SCORE1 AS SCOREτρία μεγαλύτερα σκορ καθε κατηγορίας. Κώδικας: SELECT t.ID_SIGN, t.NAMES, t.CATEGORY, t.SCOREΚώδικας: SELECT TOP3_SCORES.ID_SIGN, SIGNUP.NAMES, SIGNUP.CATEGORY, Sum(TOP3_SCORES.SCORE) AS TOTALΥΓ. Σίγουρα θα υπάρχουν και καλύτερες προτάσεις. |
1 Συνημμένο(α) Καλημέρα εγώ χρησιμοποίησα την εντολή In (SELECT TOP 3 SCORE1 FROM QRTOTAL as S WHERE S.NATION = QRTOTAL.NATION and S.CATEGORY = QRTOTAL.CATEGORY ORDER BY SCORE1 DESC) σε κάθε SCORE(1,2,3) αλλά στην κατηγορία SP πχ μου φέρνει μόνο τα 2 πρώτα.... |
Στο ερώτημα ΕΝΩΣΗΣ μου λείπει το NATION και δεν μπορώ να το προσθέσω με κώδικα...μου βγάζει σφάλμα.. |
Νάσο δεν δουλεύει σωστά...η κάτι δεν κάνω εγώ σωστά. |
Προσπάθησα να δημιουργήσω έκφραση στο ερώτημα με την εντολή SEL1:(select * from SIGNUP order by SCORE1 limit 3;) αλλά μου βγάζει λάθος σύνταξη. Ποιά είναι η σωστή; |
Καλησπέρα, σε περίπτωση που διαλέγοντας με την SELECT TOP 3 εντολή τα πρώτα 3 καλύτερα σκορ έχουμε π.χ. στην 3 θέση ισοβαθμία, με ποια εντολή απορρίπτουμε την 4 στην ουσία θέση; π.χ. 45 40 35 35 αυτή να μην υπολογισθεί... |
Καλησπέρα Σάκη, αν ο πίνακας που περιέχει τα Scores έχει και ένα πεδίο με μοναδικές τιμές, το ζητούμενο θα μπορούσε να υλοποιηθεί εύκολα. Για παράδειγμα, στην περίπτωση που ο πίνακας λέγεται Table1, και τα πεδία με τα Scores και τις μοναδικές τιμές Score και ID, θα μπορούσαμε να χρησιμοποιήσουμε το ερώτημα. Κώδικας: SELECT TOP 3 Table1.[Score] |
Γιώργο καλησπέρα, έχω προχωρήσει αρκετά τη βάση, χρησιμοποιώ την εντολή "SELECT t.ID_RACE, t.RACE, t.ID_CONT, t.NAMES, t.GR_NAT, t.NATION, t.CATEGORY, t.SCORE1 FROM DAY1_SCORE_PCP AS t WHERE (((t.SCORE1) In (SELECT TOP 4 SCORE1 FROM DAY1_SCORE_PCP WHERE ID_RACE=t.ID_RACE and NATION=t.NATION ORDER BY SCORE1 DESC ))) ORDER BY t.SCORE1 DESC; για να αντλήσω τα 4 μεγαλύτερα σκορ. Πως μπορώ να συνδυάσω την εντολή LIMIT ή ROWNUM για να μην μου φέρνει το 5ο σκορ το οποίο είναι το ίδιο με το 4ο; |
Ψάχνωντας λίγο είδα ότι η LIMIT δεν μπορεί να συνδυαστεί με την TOP. Η εντολή FETCH προφανώς είναι πιο κατάλληλη.....το θέμα είναι πως θα την συντάξω στην περίπτωσή μου..... |
Γιώργο δοκίμασα την πρότασή σου αλλά δεν δουλεύει.Στην εντολή "SELECT t.ID_RACE, t.RACE, t.ID_CONT, t.NAMES, t.GR_NAT, t.NATION, t.CATEGORY, t.SCORE1 FROM DAY1_SCORE_PCP AS t WHERE (((t.SCORE1) In (SELECT TOP 3 SCORE1 FROM DAY1_SCORE_PCP WHERE ID_RACE=t.ID_RACE and NATION=t.NATION ORDER BY SCORE1 DESC, ID_CONT; ))) πρόσθεσα την ID_CONT που είναι μοναδική(το ID του αθλητή) αλλά έχω περίπτωση με 4πλη ισοβαθμία πχ 35,35,35,35 και φέρνει αποτέλεσμα 140 και όχι 105 που εγώ θέλω.. |
Καλησπέρα 1) Σάκη η πρότασή μου αφορούσε απλό ερώτημα και όχι σύνθετο. Στη συγκεκριμένη περίπτωση, το εσωτερικό ερώτημα (απλό) επιστρέφει το σύνολο των 3 στοιχείων{35, 35, 35}. Κάθε μία από τις 4 ισοβαθμίες (35, 35, 35, 35) στο κύριο ερώτημα ανήκει στο παραπάνω σύνολο (ικανοποιεί το κριτήριο IN) και συνεπώς επιστρέφεται. Με άλλα λόγια επιστρέφονται 4 εγγραφές και σωστά το άθροισμα είναι 140 και όχι 105. Ίσως (δεν μπορώ να το δοκιμάσω) αν έβαζες στο εξωτερικό Select το TOP 3 και πρόσθετες και την πρόταση ταξινόμησης ORDER BY t.SCORE1 DESC, t.ID_CONT, να είχες σωστό αποτέλεσμα. 2) Από τις εκφράσεις TOP, LIMIT, ROWNUM, FETCH και OFFSET, που χρησιμοποιούνται στην SQL για τον περιορισμό των εγγραφών που επιστρέφονται από ένα ερώτημα, αν δεν κάνω λάθος, η Access υποστηρίζει μόνο την TOP. |
Γιώργο πως θα μπορώ να συντάξω το εξωτερικό SELECT TOP 3 αναφέρεις; |
Σάκη, δοκίμασε μήπως δουλέψει: Κώδικας: SELECT TOP 3 t.ID_RACE, t.RACE, t.ID_CONT, t.NAMES, t.GR_NAT, t.NATION, t.CATEGORY, t.SCORE1 |
Γιώργο φέρνει τα 3 πρώτα αποτελέσματα αλλά τα περιορίζει σε ένα αγώνα(RACE).Αν υπάρχουν και άλλοι αγώνες δεν έρχονται. |
Καλημέρα Σάκη δοκίμασε και το: Κώδικας: SELECT t.ID_RACE, t.RACE, t.ID_CONT, t.NAMES, t.GR_NAT, t.NATION, t.CATEGORY, t.SCORE1 |
Ναι Γιώργο χιλια μπράβο, αυτό είναι.......:respect::icon_n1::icon_n1: Είσαι :icon_superman: Ευχαριστώ και τον Νaso για την βοήθειά του.. |
Καλή συνέχεια Σάκη. Να είσαι καλά. |
| Η ώρα είναι 11:00. |
Ms-Office.gr - ©2000 - 2026, Jelsoft Enterprises Ltd.