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 :

requete sur 4 tables avec sum et soustration


Sujet :

Requêtes et SQL.

  1. #1
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Novembre 2006
    Messages
    76
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2006
    Messages : 76
    Points : 34
    Points
    34
    Par défaut requete sur 4 tables avec sum et soustration
    bonjour tout le monde
    j'ai cherché par tout mais sans solution!
    j'ai quatres tables
    marche(idmarche, posteM,lotm,montantm)
    situation(idsituation,postem,lotm,montants,idmarche)
    Avenant(idavenant,postea ,lota ,montanta, idmarche)
    plusvalue(idsituation,postepv,lotpv,montantpv,idmarche)

    alors j'ai un formaulaire dans la quelle je veux afficher

    Poste Lot Entreprise Montant (sum(MontantantS) facture(montantM-montantS) sum(montantpv)

    alors j'ai fait

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    SELECT Poste Lot Entreprise Montant (sum(MontantantS) facture(montantM-montantS) sum(montantpv) 
    FROM avenant, marche, plusvalue, situation
    where marche.Id_marche=avenant.id_Marche and marche.Id_marche=situation.id_marche
    mais le resultat n'est pas terrible

  2. #2
    Expert confirmé Avatar de Cybher
    Homme Profil pro
    Consultant réseaux et sécurité
    Inscrit en
    Mai 2005
    Messages
    3 281
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : France

    Informations professionnelles :
    Activité : Consultant réseaux et sécurité
    Secteur : Conseil

    Informations forums :
    Inscription : Mai 2005
    Messages : 3 281
    Points : 4 644
    Points
    4 644
    Par défaut
    salut,

    utilisons déjà l'écriture normalisée :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    SELECT Poste Lot Entreprise Montant (sum(MontantantS) facture(montantM-montantS) sum(montantpv) 
    FROM avenant 
    JOIN marche ON marche.Id_marche=avenant.id_Marche
    JOIN plusvalue ON ??? 
    JOIN situation ON marche.Id_marche=situation.id_marche
    on verrait déjà qu'il manque la jointure entre la table avenant et plusvalue

    ensuite, il faudrait un peu plus de détail que dire "le résultat est pas terrible" car cela ne veut pas dire grand chose

  3. #3
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Novembre 2006
    Messages
    76
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2006
    Messages : 76
    Points : 34
    Points
    34
    Par défaut
    excuse du temps mis pour te repondre
    en fait comme vous constater j'ai une table marche qui correspond a une identité qui peut avoir un ou plusieurs plusvalue,situation,avenant
    parcontre les plusvalue,situation,avenant ne peut avoir que un et un seul marche.ce pendant les plusvalue,situation,avenant non pas de lien(cle secondaire)

  4. #4
    Modérateur
    Avatar de Chtulus
    Homme Profil pro
    Ingénieur
    Inscrit en
    Avril 2008
    Messages
    3 094
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Ingénieur
    Secteur : Santé

    Informations forums :
    Inscription : Avril 2008
    Messages : 3 094
    Points : 8 678
    Points
    8 678
    Par défaut
    Bonsoir,

    Heu... idmarche non ?

    marche(idmarche, posteM,lotm,montantm)
    situation(idsituation,postem,lotm,montants,idmarche)
    Avenant(idavenant,postea ,lota ,montanta, idmarche)
    plusvalue(idsituation,postepv,lotpv,montantpv,idmarche)
    Sinon comme le dit justement cybher, si tu avais un jeu d'essai et le résultat attendu, ça irai mieux ^^ Voir la description des tables (DDL) !


  5. #5
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Novembre 2006
    Messages
    76
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2006
    Messages : 76
    Points : 34
    Points
    34
    Par défaut
    en fait je veux afficher les enregistrement suivant postedepense lot entreprise montantM, total sum(avenant) total sum(plusvalue), montantm-total sum(avenant),total sum(situation)

  6. #6
    Modérateur

    Avatar de CinePhil
    Homme Profil pro
    Ingénieur d'études en informatique
    Inscrit en
    Août 2006
    Messages
    16 801
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 61
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Ingénieur d'études en informatique
    Secteur : Enseignement

    Informations forums :
    Inscription : Août 2006
    Messages : 16 801
    Points : 34 063
    Points
    34 063
    Billets dans le blog
    14
    Par défaut
    Ca m'étonnerait que ça marche ça :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    SELECT Poste Lot Entreprise Montant (sum(MontantantS) facture(montantM-montantS) sum(montantpv)
    Il ne manquerait pas quelques virgules entre les colonnes ?

  7. #7
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Novembre 2006
    Messages
    76
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2006
    Messages : 76
    Points : 34
    Points
    34
    Par défaut
    Non ca ne marche pas !
    voici mes marche(idmarche, posteM,lotm,montantm)
    situation(idsituation,postem,lotm,montants,idmarche)
    Avenant(idavenant,postea ,lota ,montanta, idmarche)
    plusvalue(idsituation,postepv,lotpv,montantpv,idmarche)

    comment on peut faire pour afficher touts les enregistrement
    posteM ,lotm,montantm,somme situation,somme avenat somme plusvalue

    ceci etant juste un modele(exemple) et non pas la requette elle meme

  8. #8
    Expert confirmé Avatar de Cybher
    Homme Profil pro
    Consultant réseaux et sécurité
    Inscrit en
    Mai 2005
    Messages
    3 281
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : France

    Informations professionnelles :
    Activité : Consultant réseaux et sécurité
    Secteur : Conseil

    Informations forums :
    Inscription : Mai 2005
    Messages : 3 281
    Points : 4 644
    Points
    4 644
    Par défaut
    Citation Envoyé par afroweb Voir le message
    Non ca ne marche pas !
    et en quoi cela ne marche pas? désolé mais j'ai oublié ma boule de cristal à la maison

  9. #9
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Novembre 2006
    Messages
    76
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2006
    Messages : 76
    Points : 34
    Points
    34
    Par défaut
    excuse je me suis mal exprimer
    ta requete marche
    seulement je veux afficher les marcher qui ont un avanant .,..........
    et aussi ceux qui n'ont pas d'avenat en fait c'est pour faire un bilan et un recap cout

  10. #10
    Modérateur

    Avatar de CinePhil
    Homme Profil pro
    Ingénieur d'études en informatique
    Inscrit en
    Août 2006
    Messages
    16 801
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 61
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Ingénieur d'études en informatique
    Secteur : Enseignement

    Informations forums :
    Inscription : Août 2006
    Messages : 16 801
    Points : 34 063
    Points
    34 063
    Billets dans le blog
    14
    Par défaut
    Citation Envoyé par afroweb Voir le message
    seulement je veux afficher les marchés qui ont un avenant et aussi ceux qui n'ont pas d'avenant
    Il faut donc une jointure externe quelque part...
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    SELECT m.posteM AS 'Poste Marché', m.lotM AS 'Lot Entreprise', m.montantM AS 'Montant Marché',
        sum(a.montantA) AS 'Somme avenants',
        sum(p.montantpv) AS 'Somme plus-values',
        m.montantM - sum(a.montantA) AS 'Marché - avenants !'
        sum(s.montantantS) AS 'Somme situations'    
    FROM marche m
    LEFT OUTER JOIN avenant a ON m.Id_marche = a.id_Marche
    LEFT OUTER JOIN plusvalue p ON p.Id_marche = p.id_Marche 
    LEFT OUTER JOIN situation s ON m.Id_marche = s.id_marche
    GROUP BY m.posteM, m.lotM, m.montantM

  11. #11
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Novembre 2006
    Messages
    76
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2006
    Messages : 76
    Points : 34
    Points
    34
    Par défaut
    Merci pour ton aide tres tres preucieuse
    voici ma requete finale
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    SELECT Marche.PosteDepenseM, Marche.LotM, Marche.EntrepriseM, Marche.MontantM, MontantA 
    FROM Marche 
    LEFT OUTER JOIN Avenant  ON Marche.Id_Marche = Avenant.IdMarche 
    LEFT OUTER JOIN PlusValue  ON PlusValue.IdMarche = Marche.Id_Marche 
    GROUP BY Marche.PosteDepenseM, Marche.lotM, Marche.MontantM")
    elle marche nikel sous mysql
    mais sous VBA (accèss)impossible je develppe sous vba
    erreur :3075 erreur de syntaxe (operateur absent)

    ps: quand je fais ca
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    SELECT Marche.PosteDepenseM, Marche.LotM, Marche.EntrepriseM, Marche.MontantM, MontantA 
    FROM Marche 
    LEFT OUTER JOIN Avenant  ON Marche.Id_Marche = Avenant.IdMarche
    ca marche par contre quand j'ajoute les autres join patatra

  12. #12
    Modérateur

    Avatar de CinePhil
    Homme Profil pro
    Ingénieur d'études en informatique
    Inscrit en
    Août 2006
    Messages
    16 801
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 61
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Ingénieur d'études en informatique
    Secteur : Enseignement

    Informations forums :
    Inscription : Août 2006
    Messages : 16 801
    Points : 34 063
    Points
    34 063
    Billets dans le blog
    14
    Par défaut
    Il y a un truc bizarre à la fin de ta première requête :
    Marche.MontantM")
    le " et la ) sont en trop. Un mauvais copier/coller peut-être ?

    Pourquoi GROUP BY alors qu'il n'y a pas de fonction de calcul dans le SELECT ?
    Il y avait des sommes dans ma requête et d'après ton besoin d'origine mais elles ont disparu de ta dernière requête. C'est peut être ce manque que signale Access ?

    quand j'ajoute les autres join patatra
    Access a une fâcheuse tendance à écrire les jointures d'une manière inextricable avec des parenthèses partout et des imbrications bizarres !
    Il est fort possible qu'Access n'accepte pas cette manière pourtant normale d'écrire les jointures.
    Access traite le SQL comme il veut et pas comme il faut !

  13. #13
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Novembre 2006
    Messages
    76
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2006
    Messages : 76
    Points : 34
    Points
    34
    Par défaut
    pour la fin de mon sql ( ") ) c'est normal sous vba on ecrit
    tbl=("select * fromu ")
    mon sous se trouve sous la syntaxe join je sais pas comment m'y faire

  14. #14
    Modérateur

    Avatar de CinePhil
    Homme Profil pro
    Ingénieur d'études en informatique
    Inscrit en
    Août 2006
    Messages
    16 801
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 61
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Ingénieur d'études en informatique
    Secteur : Enseignement

    Informations forums :
    Inscription : Août 2006
    Messages : 16 801
    Points : 34 063
    Points
    34 063
    Billets dans le blog
    14
    Par défaut
    Je ne vois pas l'utilité des parenthèses !
    Il me semble que tbl devrait plutôt être une variable de type string que tu envoies ensuite à Access via une instruction qui va exécuter la requête (ça fait longtemps que je n'ai plus fait de VBA et je n'ai jamais fait de VB).

    Sinon pour tes problèmes de jointure, essaie de créer la requête en mode graphique avec l'outil d'Access. Regarde ensuite la syntaxe SQL... c'est une horreur !

    Je crains de ne pouvoir t'aider davantage, je passe la main aux spécialistes Access.

  15. #15
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Novembre 2006
    Messages
    76
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2006
    Messages : 76
    Points : 34
    Points
    34
    Par défaut
    ok merci d'avoir deplacer mon sujet

  16. #16
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Novembre 2006
    Messages
    76
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2006
    Messages : 76
    Points : 34
    Points
    34
    Par défaut
    ca marche impecable il fallait mettre ses parenthese
    , le seul soucis est que lorsque on fait la somme si il y'a un seul enregistrement il fait la somme de celui ci

Discussions similaires

  1. Requetes sur deux tables avec plusieurs retour
    Par IP-Fix dans le forum Requêtes
    Réponses: 16
    Dernier message: 13/11/2008, 18h46
  2. Réponses: 4
    Dernier message: 23/10/2006, 09h09
  3. [MySQL] Requete sur 2 tables avec champs commun
    Par marcd dans le forum PHP & Base de données
    Réponses: 3
    Dernier message: 20/04/2006, 16h14
  4. aide pour requete sur 2 tables avec clé étranere
    Par richton95 dans le forum Requêtes
    Réponses: 4
    Dernier message: 02/12/2005, 13h32
  5. besoin d'aide -> requete sur 2 tables avec count()
    Par parksto dans le forum Requêtes
    Réponses: 3
    Dernier message: 20/10/2005, 19h06

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