Sql ερώτημα

Γενικές συζητήσεις για SQL και SQL Servers (RDBMS)

Συντονιστές: WebDev Moderators, Super-Moderators

Απάντηση
argate7
Δημοσιεύσεις: 233
Εγγραφή: 30 Σεπ 2009 02:38

Sql ερώτημα

Δημοσίευση από argate7 » 09 Ιούλ 2014 19:50

Μια ερώτηση ρε παιδιά..

Αν υποθέσουμε ότι έχουμε τον παρακάτω πίνακα ο οποίος έχει βγει από join 2 κανονικών πινάκων και άλλων 2 temp που δημιουργήθηκαν για το συγκεκριμένο ερώτημα..

Αυτός είναι ο ένας temp που έχω τραβήξει τις πληροφορίες που θέλω..

Col1 col2 col3 col4 col5 col6 col7 col8 col9 col10
1 0,6 1 1 1 1 1 A 0,1 0,1
1 0,6 1 1 1 1 1 B 0,1 0,1
1 0,6 1 1 1 1 1 C 0,1 0,1
1 0,6 1 1 1 1 1 D 0,1 0,1
1 0,6 1 1 1 1 1 E 0,1 0,1
2 1,2 2 2 2 2 2 A 0,2 0,2
2 1,2 2 2 2 2 2 B 0,2 0,2
2 1,2 2 2 2 2 2 C 0,2 0,2
2 1,2 2 2 2 2 2 D 0,2 0,2
2 1,2 2 2 2 2 2 E 0,2 0,2

Θέλω να κάνω ένα update που θα κάνει τον εξής έλεγχο..
Αν το max(col2)>sum(col9) τότε να μου προσθέτει τη διάφορα που θα προκύψει μόνο στην τελευταία έγγραφη από το κάθε σετ. Και αυτό να το κάνει για όλες τις περιπτώσεις.
Δηλαδή στο τέλος, θέλω η Πέμπτη εγγραφή στην 9η στήλη να έχει 0,2 αντί για 0,1 και η δέκατη έγγραφη αντί για 0,2 να έχει 0,4. Μέχρι στιγμής κάνω τον έλεγχο σωστά, αλλά δεν μπορώ για κάθε σετ του πίνακα να κάνω αυτή την αλλαγή.

Ευχαριστώ εκ των προτέρων για τη βοήθεια!![/table]

Άβαταρ μέλους
dva_dev
Script Master
Δημοσιεύσεις: 3790
Εγγραφή: 16 Σεπ 2005 01:32
Επικοινωνία:

Sql ερώτημα

Δημοσίευση από dva_dev » 09 Ιούλ 2014 20:45

Χωρίς κάποιο primary key μόνο με το χέρι μπορείς να κάνεις update στα σίγουρα.

argate7
Δημοσιεύσεις: 233
Εγγραφή: 30 Σεπ 2009 02:38

Sql ερώτημα

Δημοσίευση από argate7 » 09 Ιούλ 2014 20:47

Έχεθς απόλυτο δίκιο...

Λοιπον primary keys είναι τα col 3,4,5 και 6.

Άβαταρ μέλους
dva_dev
Script Master
Δημοσιεύσεις: 3790
Εγγραφή: 16 Σεπ 2005 01:32
Επικοινωνία:

Sql ερώτημα

Δημοσίευση από dva_dev » 09 Ιούλ 2014 21:38

Το primary key είναι ένα πεδίο (ή περισσότερα σε περίπτωση σύνθετου) το οποίο ξεχωρίζει με μοναδικό τρόπο κάποια εγγραφή σε έναν πίνακα.
Με απλά λόγια, δεν μπορεί σε κάποιον πίνακα να υπάρχουν 2 εγγραφές που να έχουν την ίδια τιμή στο primary key.

Τα col 3,4,5 και 6 στο δείγμα των εγγραφών που έχεις δώσει του πίνακα σου έχουν τιμή
1 1 1 1 οι μισές εγγραφές και 2 2 2 2 οι άλλες μισές.
Δεν μου μοιάζει και πολύ για primary key αυτό το πράγμα.

argate7
Δημοσιεύσεις: 233
Εγγραφή: 30 Σεπ 2009 02:38

Sql ερώτημα

Δημοσίευση από argate7 » 09 Ιούλ 2014 21:48

Και πάλι έχεις δίκιο γιατί με μπέρδεψε η στοίχιση που έχω κάνει. Η στήλη με τα a,b,c,d,e είναι primary + τις 3 προηγούμενες.

Άβαταρ μέλους
dva_dev
Script Master
Δημοσιεύσεις: 3790
Εγγραφή: 16 Σεπ 2005 01:32
Επικοινωνία:

Sql ερώτημα

Δημοσίευση από dva_dev » 09 Ιούλ 2014 23:05

Αν υποθέσουμε ότι ο πίνακάς σου ονομάζεται tmp με primary key το (col3,col4,col5,col6,col8) και τα σετ αλλάζουν στα (col3,col4,col5,col6) τότε θα μπορούσες να δοκιμάσεις κάτι σαν αυτό:

Κώδικας: Επιλογή όλων

UPDATE tmp
INNER JOIN
(
	SELECT MAX(col3) c3,MAX(col4) c4,MAX(col5) c5,MAX(col6) c6,MAX(col8) c8,MAX(col2)-SUM(col9) v
	FROM tmp t0
	GROUP BY col3,col4,col5,col6
	HAVING MAX(col2)>SUM(col9)
) t1
ON (col3=c3 AND col4=c4 AND col5=c5 AND col6=c6 AND col8=c8)
SET col9=col9+v;

argate7
Δημοσιεύσεις: 233
Εγγραφή: 30 Σεπ 2009 02:38

Sql ερώτημα

Δημοσίευση από argate7 » 10 Ιούλ 2014 12:07

Καλημέρα!!

Δοκίμασα αυτό που μου έστειλες και είχα θέματα αρκετά..
Βρήκα άλλη λύση. Έπαιξα στο where και μου βγήκε σωστά!!

Σε ευχαριστώ πολύ για το χρόνο σου!!

Απάντηση

Επιστροφή στο “Βάσεις Δεδομένων και SQL - γενικά”

Μέλη σε σύνδεση

Μέλη σε αυτήν τη Δ. Συζήτηση: Δεν υπάρχουν εγγεγραμμένα μέλη και 0 επισκέπτες