IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

MS SQL Server Discussion :

Probleme de Boucle


Sujet :

MS SQL Server

  1. #1
    Membre à l'essai
    Inscrit en
    Octobre 2005
    Messages
    22
    Détails du profil
    Informations forums :
    Inscription : Octobre 2005
    Messages : 22
    Points : 20
    Points
    20
    Par défaut Probleme de Boucle
    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.


  2. #2
    Membre habitué
    Profil pro
    Inscrit en
    Mars 2006
    Messages
    124
    Détails du profil
    Informations personnelles :
    Âge : 39
    Localisation : France, Rhône (Rhône Alpes)

    Informations forums :
    Inscription : Mars 2006
    Messages : 124
    Points : 130
    Points
    130
    Par défaut
    ton champ2 est dans quelle table ?

  3. #3
    Membre à l'essai
    Inscrit en
    Octobre 2005
    Messages
    22
    Détails du profil
    Informations forums :
    Inscription : Octobre 2005
    Messages : 22
    Points : 20
    Points
    20
    Par défaut
    La meme table

  4. #4
    Membre habitué
    Profil pro
    Inscrit en
    Mars 2006
    Messages
    124
    Détails du profil
    Informations personnelles :
    Âge : 39
    Localisation : France, Rhône (Rhône Alpes)

    Informations forums :
    Inscription : Mars 2006
    Messages : 124
    Points : 130
    Points
    130
    Par défaut
    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 ?

  5. #5
    Membre à l'essai
    Inscrit en
    Octobre 2005
    Messages
    22
    Détails du profil
    Informations forums :
    Inscription : Octobre 2005
    Messages : 22
    Points : 20
    Points
    20
    Par défaut
    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

  6. #6
    Membre habitué
    Profil pro
    Inscrit en
    Mars 2006
    Messages
    124
    Détails du profil
    Informations personnelles :
    Âge : 39
    Localisation : France, Rhône (Rhône Alpes)

    Informations forums :
    Inscription : Mars 2006
    Messages : 124
    Points : 130
    Points
    130
    Par défaut
    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)

  7. #7
    Membre à l'essai
    Inscrit en
    Octobre 2005
    Messages
    22
    Détails du profil
    Informations forums :
    Inscription : Octobre 2005
    Messages : 22
    Points : 20
    Points
    20
    Par défaut
    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??

  8. #8
    Membre confirmé
    Profil pro
    Inscrit en
    Juillet 2004
    Messages
    434
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2004
    Messages : 434
    Points : 502
    Points
    502
    Par défaut
    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)
    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

    Essaie plutot
    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
    Code non optimal mais en cherchant un peu ca s'optimise

  9. #9
    Membre à l'essai
    Inscrit en
    Octobre 2005
    Messages
    22
    Détails du profil
    Informations forums :
    Inscription : Octobre 2005
    Messages : 22
    Points : 20
    Points
    20
    Par défaut
    wé la ca marche,
    merci à tous.

  10. #10
    Membre habitué
    Profil pro
    Inscrit en
    Mars 2006
    Messages
    124
    Détails du profil
    Informations personnelles :
    Âge : 39
    Localisation : France, Rhône (Rhône Alpes)

    Informations forums :
    Inscription : Mars 2006
    Messages : 124
    Points : 130
    Points
    130
    Par défaut
    Citation Envoyé par ZERS
    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
    hum ouais

    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

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Probleme de boucle a s arracher les cheuveux
    Par calimero642 dans le forum Langage
    Réponses: 6
    Dernier message: 16/03/2006, 14h44
  2. Probleme de boucle avec des processus sous UNIX
    Par sebastieng dans le forum POSIX
    Réponses: 6
    Dernier message: 15/10/2005, 18h57
  3. [Language]Problème de boucle
    Par marc_dd dans le forum Langage
    Réponses: 11
    Dernier message: 06/10/2005, 14h24
  4. Problem de boucle.....
    Par skad dans le forum C++
    Réponses: 6
    Dernier message: 29/09/2005, 16h28
  5. [C#] Probleme de boucle for et random
    Par Freeman166 dans le forum Windows Forms
    Réponses: 7
    Dernier message: 09/01/2005, 14h34

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo