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

Langage SQL Discussion :

Problème de filtre sur table


Sujet :

Langage SQL

  1. #1
    Membre du Club
    Profil pro
    Inscrit en
    Septembre 2003
    Messages
    40
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2003
    Messages : 40
    Points : 46
    Points
    46
    Par défaut Problème de filtre sur table
    Bonjour.

    J'ai un petit problème avec une requête SQL que je n'arrive pas à refuse.
    Elle porte sur 5 tables :
    -table client
    -table pays : sert juste à récupérer le libellé du pays d'origine du client
    -table offre : table centrale ou l'on enregistre toutes les offres par client.
    -table statut : table avec tous les statuts par lesquels une offre peut passer (en cours, en attente, terminée etc )
    -table avoir : table qui enregistre l'historique des statuts pour chaque offre.
    cette table est définie de la façon suivante : (#idoffre, #idstatut, dateEtat, commentaire)

    Ce que je souhaite faire c'est extraire toutes les données de mon SELECT pour chaque offre avec son dernier statut.
    Actuellement mon problème c'est que ca me sors toutes les offres avec leurs différents statuts successifs.

    nb: je ne doit pas utiliser de sous requete pour faire cela !!
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
    SELECT DISTINCT avoir.idOffre, dateDepot, paiement, mission, dateDebPrev, dateFinPrev, nomPays, raisonSociale, libelleStatut
    FROM offre, pays, client, statut, avoir
    WHERE offre.idClient = client.idClient AND
    statut.idStatut = avoir.idStatut AND
    offre.idOffre = avoir.idOffre AND
    client.idPays = pays.idPays
    Merci pour votre aide et j'espère avoir été clair

  2. #2
    Rédacteur

    Avatar de SQLpro
    Homme Profil pro
    Expert bases de données / SQL / MS SQL Server / Postgresql
    Inscrit en
    Mai 2002
    Messages
    21 850
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Var (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Expert bases de données / SQL / MS SQL Server / Postgresql
    Secteur : Conseil

    Informations forums :
    Inscription : Mai 2002
    Messages : 21 850
    Points : 52 984
    Points
    52 984
    Billets dans le blog
    6
    Par défaut
    Il y a près de 15 ans que les jointures ne se font plus dans la clause WHERE !!! Ou avez vous appris SQL ???

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    SELECT DISTINCT avoir.idOffre, dateDepot, paiement, 
                    mission, dateDebPrev, dateFinPrev, nomPays, 
                    raisonSociale, libelleStatut
     
    FROM  client C
          INNER JOIN pays   P ON C.idPays = P.idPays
          INNER JOIN offre  O ON C.idClient = O.idClient
                INNER JOIN avoir  A ON O.idOffre = A.idOffre 
                      INNER JOIN statut S ON A.idStatut = S.idStatut
     
    WHERE A.dateEtat = (SELECT MAX DateEtat
                        FROM   avoir AA
                        WHERE  AA.idOffre = A.idOffre)
    A +

  3. #3
    Membre du Club
    Profil pro
    Inscrit en
    Septembre 2003
    Messages
    40
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2003
    Messages : 40
    Points : 46
    Points
    46
    Par défaut
    Merci beaucoup. Problème résolu.

    Sinon pour info dans beaucoup d'écoles supérieures et écoles d'ingénieurs on continue à enseigner le SQL sous cette forme

    Merci en tout cas pour le conseil !

  4. #4
    Membre régulier
    Inscrit en
    Juillet 2004
    Messages
    306
    Détails du profil
    Informations forums :
    Inscription : Juillet 2004
    Messages : 306
    Points : 122
    Points
    122
    Par défaut
    Si j'ai bien compris, tu aimerais avoir l'offre et son dernier statut, c'est ça ?

    Ca donnerai ceci:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    SELECT idOffre,idStatut
    FOM avoir
    WHERE dateEtat=(select max(dateEtat) from avoir)
    Et ensuite si tu veux récupérer des détails sur l'offre et sur les clients ==>Jointure

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    SELECT avo.idOffre,avo.idStatut,cli.nom
    FROM avoir avo
    JOIN offre ofr
        ON ofr.idOffre=avo.idOffre
    JOIN client cli
        ON cli.idClient=ofr.idClient
    WHERE dateEtat=(select max(dateEtat) from avoir)
    Je pense qu'il doit y avoir moyen de faire sans la sous-requête... mais voilà une solution qui marche.

    Bye

  5. #5
    Membre régulier
    Inscrit en
    Juillet 2004
    Messages
    306
    Détails du profil
    Informations forums :
    Inscription : Juillet 2004
    Messages : 306
    Points : 122
    Points
    122
    Par défaut
    Bon bah je crois que je devrais arrêter de discuter, du coup je suis un peu en retard...

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

Discussions similaires

  1. Problème de filtre sur une table
    Par bilal_ini dans le forum Bases de données
    Réponses: 9
    Dernier message: 18/07/2019, 07h35
  2. Probléme de Filtre sur une Table
    Par souminet dans le forum Débuter
    Réponses: 1
    Dernier message: 28/04/2008, 11h34
  3. Filtre sur tables en relation
    Par asterix08 dans le forum WinDev
    Réponses: 4
    Dernier message: 28/11/2006, 19h47
  4. Problème de filtre sur date avec ADOQuery
    Par lingli dans le forum Bases de données
    Réponses: 12
    Dernier message: 30/04/2006, 15h40
  5. Problème de filtre sur un formulaire
    Par bernardmichel dans le forum IHM
    Réponses: 6
    Dernier message: 12/12/2005, 15h36

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