Voila j'ai un petit probleme, je cherche à faire la requete suivante...
ALGORYTHME
-------------
POUR CHAQUE VALEUR DE CHAMP1 de TABLE1
| SUPPRIMER LIGNE OU CHAMP2=MAX(CHAMP2)
| ET OU CHAMP1=CHAMP1 COURANT
FIN
Merci d'avance pour vos reponses.
![]()
![]()
Voila j'ai un petit probleme, je cherche à faire la requete suivante...
ALGORYTHME
-------------
POUR CHAQUE VALEUR DE CHAMP1 de TABLE1
| SUPPRIMER LIGNE OU CHAMP2=MAX(CHAMP2)
| ET OU CHAMP1=CHAMP1 COURANT
FIN
Merci d'avance pour vos reponses.
![]()
![]()
La meme table
je comprend pas trop ta requête, tu vas supprimer toutes tes lignes la si tu fais cette requête en boucle ?
parce que si tu supprimes une ligne avec ton max(champ2), il y aura forcement une autre ligne avec un champ2 qui deviendra le max !
(sauf si tu parcours qu'une fois ta table)
tu veux obtenir quoi en final ?
il y a plusieurs valeur identique pour ton champ 2 ?
tu peux donner un ex concrait ?
TABLE1 AVANT
CHAMP1 | CHAMP2
10001 | 1
10001 | 2
10001 | 3
10002 | 1
10002 | 3
10002 | 6
TABLE1 APRES
CHAMP1 | CHAMP2
10001 | 1
10001 | 2
10002 | 1
10002 | 3
Ici, on a supprimé le max Champ2 (=3) lorsque Champ1=10001
puis Champ2 (=6) lorsque champ1=10002
pas de valeur identique pour le champ2
ah c'est plsu clair !
testé sous Access, j'ai pas SQL server sous la main (donc je sais plus s'il accepte les sous requete...)
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4 DELETE from Table1 where champ2 in (SELECT max(champ2) from table1 group by champ1)
je me disais aussi, c'etait trop simple
en fait ca ne fonctionne pas
On a avec ta requete
TABLE1 AVANT:
CHAMP1 | CHAMP2
10001 | 1
10001 | 2
10001 | 3
10002 | 1
10002 | 3
10002 | 6
TABLE1 APRES:
CHAMP1 | CHAMP2
10001 | 1
10001 | 2
10002 | 1
la ligne 10002 | 3 n'est pas affiché car elle 3 est le max de champ1.
or, elle devrait l'etre..
Ai-je été clair??
Ca marchera pas ce truc... Tu va supprimer toutes les lignes qui ont la valeur maximale de ta colonne Champ2, quel que soit le champ 1
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3 DELETE from Table1 where champ2 in (SELECT max(champ2) from table1 group by champ1)
Essaie plutot
Code non optimal mais en cherchant un peu ca s'optimise
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7 DELETE A FROM Table1 A INNER JOIN (SELECT Champ1, MAx(Champ2) FROM Table1 group by Champ1) B ON A.Champ1 = B.Champ1 AND A.Champ2 = B.Champ2
wé la ca marche,
merci à tous.
hum ouaisEnvoyé par ZERS
![]()
j'ai pris un mauvais exemple pour tester ma requête xD
c'est vrai que j'ai relié le champ2 au champ 1 dans la sous requete mais pas dans la requete![]()
Partager