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

Requêtes et SQL. Discussion :

Double INNER JOIN


Sujet :

Requêtes et SQL.

  1. #1
    Membre habitué
    Inscrit en
    Mars 2007
    Messages
    258
    Détails du profil
    Informations personnelles :
    Âge : 43

    Informations forums :
    Inscription : Mars 2007
    Messages : 258
    Points : 127
    Points
    127
    Par défaut Double INNER JOIN
    Bonjour à tous,

    Alors voici mon problème j'ai 3 tables dont voici le shéma



    Donc j'ai la table département qui contient un ID, NOM, NUM, MAIL, ACTIVITE
    Num correspond au numéro du département et activite est soit 2, 3 ou 4.
    Le 2 correspond au siège central, le 3 au marchès et le 4 au rèseau.

    Ensuite j'ai une table centre qui contient un ID, NOM, NUM et REL.
    Rel est la relation avec le departement et NUM correspond au numéro du centre.

    Et pour terminer j'ai une table gsm qui contien un ID, NOM, TEL, DEP, PRIX NBAP, DUREE, NBSMS, NTRIM, ANNEE, BLACKB et CENTRE.

    Dep contient le nom du département en toutes lettres, ntrim = numéro du trimestre, blackb est un oui/non et centre.
    Le problème c'est que CENTRE peut correspondre soit a departement.num soit a centre.num donc il faudrait tester les 2 je suppose.

    Voici la partie statistique : je dois exécuter un graphique dans excel qui me donne le prix moyen de l'abonnement par activite.
    Donc une moyenne du prix des 2, des 3 et des 4.

    Je ne vois même pas par ou commencer !!

    Auriez-vous une petite idée pour moi ??

    D'avance je vous remercie

    Benjisan

  2. #2
    Membre habitué
    Inscrit en
    Mars 2007
    Messages
    258
    Détails du profil
    Informations personnelles :
    Âge : 43

    Informations forums :
    Inscription : Mars 2007
    Messages : 258
    Points : 127
    Points
    127
    Par défaut Question
    Est ce que vous pensez que c'est réalisable via une seul requête ?
    Ou bien je passe par une table temporaire ??

    C'est la dernière partie de mon projet mais je ne sais pas comment m'y prendre !!

    Si jamais vous avez une petite idée pour me dépanner, je suis preneur !

    D'avance merci de prendre le temps de lire mon post

    A bientôt

    Benjisan

  3. #3
    Membre habitué
    Inscrit en
    Mars 2007
    Messages
    258
    Détails du profil
    Informations personnelles :
    Âge : 43

    Informations forums :
    Inscription : Mars 2007
    Messages : 258
    Points : 127
    Points
    127
    Par défaut Essai
    Beh voilà, j'ai effectué un test, dites moi ce que vous en pensez, il y a surêment moyen de trouver beaucoup mieux. et en plus je pense que les résultats ne sont pas correcte, mais je vais tester.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    SELECT round(Avg((gsm.prix)),2) AS Expr1, departement.activite
    FROM gsm INNER JOIN departement ON gsm.centre = departement.num
    WHERE ((([gsm]![centre])=[departement]![num]))
    GROUP BY departement.activite
    UNION ALL SELECT round(Avg((gsm.prix)),2) AS Expr1, departement.activite
    FROM gsm INNER JOIN centre ON gsm.centre =centre.num
    WHERE ((([gsm]![centre])=[centre]![num]))
    GROUP BY departement.activite;
    Qu'en pensez vous ???

    D'avance merci

    Benjisan

  4. #4
    Membre habitué
    Inscrit en
    Mars 2007
    Messages
    258
    Détails du profil
    Informations personnelles :
    Âge : 43

    Informations forums :
    Inscription : Mars 2007
    Messages : 258
    Points : 127
    Points
    127
    Par défaut Resultat positif
    J'ai modifié ma requête et cette fois les resultats semblent positifs.
    Mais malheureusement je n'y arrive pas via une seule requête et je vais devoir passer via une table temporaire car j'utilise un UNION ALL donc pour une même activité, exemple activité 4, j'ai 2 valeurs.

    Voici le code de ma requête :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    SELECT avg(gsm.prix) AS Expr1, departement.activite
    FROM gsm, departement
    WHERE (gsm.centre=departement.num)
    GROUP BY departement.activite
    UNION ALL
    SELECT avg(gsm.prix) AS Expr1, departement.activite
    FROM gsm, departement, centre
    WHERE ((gsm.centre=centre.num) AND (departement.id=centre.rel))
    GROUP BY departement.activite;
    J'ai également essayé via un OR dans le WHERE mais le résultats n'est pas bon

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    SELECT avg(gsm.prix) AS Expr1, departement.activite
    FROM gsm, departement, centre
    WHERE (gsm.centre=departement.num) OR ((gsm.centre=centre.num) AND (departement.id=centre.rel))
    GROUP BY departement.activite;
    A bientôt

    Benjisan

Discussions similaires

  1. [AC-2003] Double Inner Join pour table Codier ?
    Par YakiCola dans le forum Requêtes et SQL.
    Réponses: 9
    Dernier message: 23/07/2013, 10h10
  2. Double inner join
    Par richton95 dans le forum Requêtes et SQL.
    Réponses: 4
    Dernier message: 29/09/2010, 16h58
  3. Mysql Inner join
    Par ..:: Atchoum ::.. dans le forum Requêtes
    Réponses: 3
    Dernier message: 25/10/2007, 12h21
  4. Erreur lors d'une requete INNER JOIN
    Par k-lendos dans le forum Langage SQL
    Réponses: 2
    Dernier message: 17/03/2004, 15h09
  5. Inner Join & Select
    Par bakaneko dans le forum Langage SQL
    Réponses: 7
    Dernier message: 10/02/2004, 10h48

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