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 :

Alors là j'comprends pas le résultat de cette requête.


Sujet :

Requêtes et SQL.

  1. #1
    Membre à l'essai
    Profil pro
    Inscrit en
    Novembre 2006
    Messages
    27
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2006
    Messages : 27
    Points : 18
    Points
    18
    Par défaut Alors là j'comprends pas le résultat de cette requête.
    Bonjour,


    Aujourd'hui je fais face à une requête qui me déroute... Somme toute très simple au premier abord, mais son résultat me laisse perplexe et dubitatif... Je vous expose le truc...

    Soit 3 tables dont je vous donne le début des données:

    1) la table nomenclature est la liste des différentes classes d'occupation des sols du Corine land cover .
    CORINE_C3 CORINE_N3f
    111 Tissu urbain continu
    112 Tissu urbain discontinu
    121 Zones industrielles et commerciales
    122 Réseaux routier et ferroviaire et espaces associés
    123 Zones portuaires
    124 Aéroports
    131 Extraction de matériaux
    132 Décharges

    2) Les tables 2 et 3 sont le résultats de l'extraction de ce corine landcover pour différentes régions géographiques avec pour chaque classe de Corine une surface associée. Chaque table ressemble à quelque chose comme:
    CORINE_C3 Table1_Shape_Area
    211 736879071.3
    242 13.10638749
    311 226060.4641
    311 11151.94523
    311 519750.1737
    243 394439.7546
    311 163970.4339
    242 154931.4694
    311 339539.8674
    112 307010.4828
    311 287449.0376
    311 756764.9466
    Comme vous pouvez le voir certaines classes se répètent (exemple "311"), les deux tables 1 et 2 n'ont pas le même nombre d'échantillon ni le même ordre mais leur structure est parfaitement similaire.

    Ma question est de lier chacune de mes tables 1 et 2 à la table nomenclature (table n°1) via le champ "CORINE_C3" en faisant la somme (opération "somme") des surfaces ("Shape_Area") pour connaître la surface relative à chacune des classes d'occupation de sol... Jusque là pas de problème particulier lorsque je commence par lier la table nomenclature (n°1) à la table n°2 (jointure "1 à plusieurs") .

    CORINE_C3 Table1_Shape_Area
    111 509959.3708
    112 16504234.4
    121 3088814.396
    122
    123


    Le problème intervient lorsque je rajoute la table n°3 en la liant de la même manière à la table nomenclature n°1. Le résultat est complètement aberrant car pour la somme des surfaces de ma table n°2 je n'obtiens plus le même résultat que précédemment...

    CORINE_C3 Table1_Shape_Area Table2_Shape_Area
    111 1019918.742 1879992.755
    112 4835740680 3779604885
    121 138996647.8 104608748.4
    122 913461.9721

    Je biensûr le problème pourrait se régler en réalisant une requête individuelle pour chaque table. Mais c'est biensûr un peu 'lourd' de procéder ainsi et je n'arrive pas à bien comprendre le problème que pose le fait de réaliser une seule requête globale... Où est l'erreur?

    En réalité je dispose de plus de 150 tables du même genre que 'table n°2 et n°3' qui nécessiteraient d'être individuellement 'sommées' pour connaître la surface de chaque classe d'occupation des sols... Voyez vous une solution assez simple pour y parvenir de façon automatique via VBA peut être?

    Merci d'avance pour vos conseils et explications,

    Clem

  2. #2
    Modérateur

    Homme Profil pro
    Inscrit en
    Octobre 2005
    Messages
    15 331
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Canada

    Informations forums :
    Inscription : Octobre 2005
    Messages : 15 331
    Points : 23 786
    Points
    23 786
    Par défaut
    Ça serait bien que tu poste le SQL de ta requête pour s'en assurer mais je soupçonne que tu as un effet de produit croisé.

    Probablement que tu as plusieurs fois les mêmes codes dans tes tables 2 et 3 et qu'ils se répètent.

    Pour vérifier fait une requête Select ayant la même structure que ta requête de somme (sans le regroupement), regarde le résultat enr par enr. Tu vas probablement voir des répétitions.

    A+
    Vous voulez une réponse rapide et efficace à vos questions téchniques ?
    Ne les posez pas en message privé mais dans le forum, vous bénéficiez ainsi de la compétence et de la disponibilité de tous les contributeurs.
    Et aussi regardez dans la FAQ Access et les Tutoriaux Access. C'est plein de bonnes choses.

  3. #3
    Membre actif
    Inscrit en
    Mai 2006
    Messages
    179
    Détails du profil
    Informations forums :
    Inscription : Mai 2006
    Messages : 179
    Points : 222
    Points
    222
    Par défaut
    salut,
    si tu veux comprendre ce qui se passe retire les regroupement et les sommes à ta requête ==> Exécute la, et tu verras toutes les lignes produites ==> tu comprendras ce qu'est un produit cartésien sur trois tables et 2 jointures
    ==> La seule solution tu fais ton regroupement entre les deux tables qui te donnerons les sommes recherchées ==> puis tu prends le résultat de cette requete et tu fais une jointure avec la troisième table sans effectuer de somme.

  4. #4
    Membre à l'essai
    Profil pro
    Inscrit en
    Novembre 2006
    Messages
    27
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2006
    Messages : 27
    Points : 18
    Points
    18
    Par défaut
    Salut et merci de vos réponses,

    C clair, il s'agit bien d'un effet de produit croisé. Quant à la solution que propose Jack78960, je pense effectivement qu'il faut procéder ainsi.

    ==> La seule solution tu fais ton regroupement entre les deux tables qui te donnerons les sommes recherchées ==> puis tu prends le résultat de cette requete et tu fais une jointure avec la troisième table sans effectuer de somme.
    Ma seule "inquiétude", c'est que je possède + de 150 tables pour lesquelles je devrais donc effectuer 150 requête de regroupement avant de les joindre chacune entre elles... A vrai dire, c'est assez lourd... Avez vous peut être des pistes de résolution via VBA peut être?

    Merci encore!

    Clem

Discussions similaires

  1. Je ne comprend pas le résultat du programme
    Par sk8trasher dans le forum Débuter
    Réponses: 2
    Dernier message: 22/10/2012, 16h39
  2. Réponses: 11
    Dernier message: 10/12/2008, 20h49
  3. Réponses: 2
    Dernier message: 29/01/2008, 12h04
  4. Réponses: 2
    Dernier message: 12/01/2007, 01h27
  5. Comment classer le résultat de cette requête
    Par Tim Beck dans le forum Requêtes
    Réponses: 1
    Dernier message: 01/02/2006, 12h44

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