Forum

Forum (https://www.ms-office.gr/forum/)
-   Access - Ερωτήσεις / Απαντήσεις (https://www.ms-office.gr/forum/access-erotiseis-apantiseis/)
-   -   [ Φόρμες ] Σύνθεση 2 πεδίων και κατανομή θέσεων (https://www.ms-office.gr/forum/access-erotiseis-apantiseis/5060-sinthesi-2-pedion-kai-katanomi-theseon.html)

smasak 28-10-18 13:24

Σύνθεση 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.

smasak 29-10-18 19:51

Το 1ο ερώτημα το έλυσα με ερώτημα και τύπο [...]& " "&[....].

nasos23 30-10-18 08:15

1 Συνημμένο(α)
Καλημέρα σε όλους.
Σάκη δες το συνημμένο

smasak 30-10-18 10:09

1 Συνημμένο(α)
Καλημέρα, αυτό είναι Naso.
Εγώ υλοποίησα το ζητούμενο σε excel στο αρχείο που επισυνάπτω και έψαχνα λύση στην access την οποία μου έδωσες.
Ευχαριστώ

nasos23 30-10-18 10:52

Να είσαι καλά.

smasak 15-11-18 16:46

1 Συνημμένο(α)
Καλησπέρα, εξελίσσοντας λίγο την βάση προέκυψε ενα θέμα με τα σύνολα.
Πως γίνεται να παίρνω στο πεδίο TOTAL στο ερώτημα QR_RANKcateg το σύνολο από τα
3 μεγαλύτερα σκορ ανά κατηγορία και όχι από όλα τα σκορ;

smasak 16-11-18 18:13

Στο excel θα χρησιμοποιούσα την συνάρτηση =SUMPRODUCT(LARGE([SCORE1];ROW(INDIRECT("1:3"))))

στην access πως θα μπορούσε να συνταχθεί;

nasos23 16-11-18 22:13

Καλησπέρα Σάκη
Παράθεση:

Πως γίνεται να παίρνω στο πεδίο TOTAL στο ερώτημα QR_RANKcateg το σύνολο από τα
3 μεγαλύτερα σκορ ανά κατηγορία και όχι από όλα τα σκορ;
Η πρότασή μου.
1. Δημιουργούμε ένα ερώτημα συνένωσης. πχ."UNION_SCORE"
Κώδικας:

SELECT SIGNUP.ID_SIGN, SIGNUP.CATEGORY, SIGNUP.NAMES, SIGNUP.SCORE1 AS SCORE
FROM SIGNUP;
union
SELECT  SIGNUP.ID_SIGN, SIGNUP.CATEGORY, SIGNUP.NAMES, SIGNUP.SCORE2 AS SCORE
FROM SIGNUP;
UNION SELECT SIGNUP.ID_SIGN, SIGNUP.CATEGORY, SIGNUP.NAMES, SIGNUP.SCORE3 AS SCORE
FROM SIGNUP;

2. Στη συνέχεια δημιουργούμε ένα δεύτερο ερώτημα πχ "TOP3_SCORES" όπου αντλούμε τα
τρία μεγαλύτερα σκορ καθε κατηγορίας.
Κώδικας:

SELECT t.ID_SIGN, t.NAMES, t.CATEGORY, t.SCORE
FROM UNION_SCORE AS t
WHERE (((t.SCORE) In (SELECT TOP 3 SCORE
    FROM UNION_SCORE
  WHERE CATEGORY = t.CATEGORY
  ORDER BY SCORE DESC
)))
ORDER BY t.SCORE DESC;

3.Τρίτο ερώτημα για το σύνολο των επιμέρους σκόρ "TOTAL_TOP3_SCORES"
Κώδικας:

SELECT TOP3_SCORES.ID_SIGN, SIGNUP.NAMES, SIGNUP.CATEGORY, Sum(TOP3_SCORES.SCORE) AS TOTAL
FROM TOP3_SCORES INNER JOIN SIGNUP ON TOP3_SCORES.ID_SIGN = SIGNUP.ID_SIGN
GROUP BY TOP3_SCORES.ID_SIGN, SIGNUP.NAMES, SIGNUP.CATEGORY;

4. Και για το ερώτημά σου "QR_RANKcateg" κανε τις ανάλογες προσαρμογές.

ΥΓ. Σίγουρα θα υπάρχουν και καλύτερες προτάσεις.

smasak 17-11-18 09:16

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 πρώτα....

smasak 17-11-18 13:45

Στο ερώτημα ΕΝΩΣΗΣ μου λείπει το NATION και δεν μπορώ να το προσθέσω με κώδικα...μου βγάζει σφάλμα..

smasak 17-11-18 20:10

Νάσο δεν δουλεύει σωστά...η κάτι δεν κάνω εγώ σωστά.

smasak 18-11-18 12:38

Προσπάθησα να δημιουργήσω έκφραση στο ερώτημα με την εντολή SEL1:(select *
from SIGNUP
order by SCORE1
limit 3;) αλλά μου βγάζει λάθος σύνταξη.
Ποιά είναι η σωστή;

smasak 22-11-18 19:09

Καλησπέρα, σε περίπτωση που διαλέγοντας με την SELECT TOP 3 εντολή τα πρώτα 3 καλύτερα σκορ έχουμε π.χ. στην 3 θέση ισοβαθμία, με ποια εντολή απορρίπτουμε την 4 στην ουσία θέση;
π.χ. 45
40
35
35 αυτή να μην υπολογισθεί...

kapetang 23-11-18 19:03

Καλησπέρα

Σάκη, αν ο πίνακας που περιέχει τα Scores έχει και ένα πεδίο με μοναδικές τιμές, το ζητούμενο θα μπορούσε να υλοποιηθεί εύκολα.

Για παράδειγμα, στην περίπτωση που ο πίνακας λέγεται Table1, και τα πεδία με τα Scores και τις μοναδικές τιμές Score και ID, θα μπορούσαμε να χρησιμοποιήσουμε το ερώτημα.
Κώδικας:

SELECT TOP 3 Table1.[Score]
FROM Table1
ORDER BY [Score] DESC , ID;

Όπως βλέπεις στην ταξινόμηση συμμετέχει και το πεδίο με τις μοναδικές τιμές.

smasak 23-11-18 21:00

Γιώργο καλησπέρα, έχω προχωρήσει αρκετά τη βάση, χρησιμοποιώ την εντολή

"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ο;

smasak 23-11-18 21:55

Ψάχνωντας λίγο είδα ότι η LIMIT δεν μπορεί να συνδυαστεί με την TOP.
Η εντολή FETCH προφανώς είναι πιο κατάλληλη.....το θέμα είναι πως θα την συντάξω στην περίπτωσή μου.....

smasak 24-11-18 12:00

Γιώργο δοκίμασα την πρότασή σου αλλά δεν δουλεύει.Στην εντολή

"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 που εγώ θέλω..

kapetang 24-11-18 12:54

Καλησπέρα

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.

smasak 24-11-18 17:37

Γιώργο πως θα μπορώ να συντάξω το εξωτερικό SELECT TOP 3 αναφέρεις;

kapetang 24-11-18 19:25

Σάκη, δοκίμασε μήπως δουλέψει:

Κώδικας:

SELECT TOP 3 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
)))
ORDER BY t.SCORE1 DESC, t.ID_CONT


smasak 24-11-18 20:35

Γιώργο φέρνει τα 3 πρώτα αποτελέσματα αλλά τα περιορίζει σε ένα αγώνα(RACE).Αν υπάρχουν και άλλοι αγώνες δεν έρχονται.

kapetang 25-11-18 08:13

Καλημέρα

Σάκη δοκίμασε και το:

Κώδικας:

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.ID_CONT) In (SELECT TOP 3 ID_CONT
FROM DAY1_SCORE_PCP
WHERE
ID_RACE=t.ID_RACE and
NATION=t.NATION
ORDER BY SCORE1 DESC, ID_CONT;
)))


smasak 25-11-18 10:45

Ναι Γιώργο χιλια μπράβο, αυτό είναι.......:respect::icon_n1::icon_n1:
Είσαι :icon_superman:
Ευχαριστώ και τον Νaso για την βοήθειά του..

kapetang 25-11-18 10:56

Καλή συνέχεια Σάκη.
Να είσαι καλά.


Η ώρα είναι 11:00.

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


Search Engine Optimization by vBSEO 3.3.2