#1 Thu 03 February 2011 22:15
- GeoPopulation
- Participant occasionnel
- Date d'inscription: 17 May 2009
- Messages: 14
Requête entre deux tables : somme des aires
Bonsoir,
Admettons que j'ai deux tables :
- PLAN_EAU : id, nom, type, centroid...
- DEPARTEMENT : id , nom, nb_hab...
Je souhaiterais connaître la surface des PLAN_EAU pour chaque DEPARTEMENT, sans passer par la modification de la structure de mes tables (pas de création de champs "surface" par exemple).
Même si je m'y connais pas beaucoup en SQL j'utilise la FMB. Avec le code suivant, j'arrive à obtenir la somme des surfaces des plans d'eau sur le département ID=01.
Code:
Select Sum(area(obj, "sq km")) "surface" From PLAN_EAU Where obj Within (Select obj From DEPARTEMENT where ID = "01") into RESULTAT
(Pour avoir déjà tester des requêtes SQL sous PhpMyAdmin, j'ai entendu dire que la requêtes imbriquée étaient une mauvaise idée. Aussi sous FMB ?)
J'aimerais maintenir pouvoir "boucler" cette requête pour obtenir en RESULTAT les surfaces pour chaque département avec leur ID (c'est plus pratique !). J'ai testé ID=* mais MapInfo m'indique qu'il y a plusieurs valeurs dans la sous-requête. Si j'enlève la condition WHERE il y a une erreur du type "trop de sous-requête".
En espérant que vous puissiez m'aider !
Merci,
Hors ligne
#2 Fri 04 February 2011 07:56
- Spacejo
- Membre
- Lieu: Nancy
- Date d'inscription: 17 Aug 2008
- Messages: 2511
Re: Requête entre deux tables : somme des aires
Salut,
Ce qu'il te faut, c'est un générateur de script pour générer toutes tes requètes.
Fait une recherche sur le forum avec comme mot clef "Scriptgen" ou "générateur de script"
J'ai posté plusieurs fois sur du travail en batch comme ton problème.
A+
Joël
Hors ligne
#3 Fri 04 February 2011 09:04
- GeoPopulation
- Participant occasionnel
- Date d'inscription: 17 May 2009
- Messages: 14
Re: Requête entre deux tables : somme des aires
N'est-il pas possible de réaliser une simple requête pour retourner dans une table résultat la surface PLAN_EAU pour chaque ID département. Je souhaiterais rester plus "interne" à mapinfo. C'est plus ce que je recherche si je me suis mal exprimé dans mon premier message.
Hors ligne
#4 Fri 04 February 2011 12:38
Re: Requête entre deux tables : somme des aires
Hello
j'ai fait un test et ça serait un truc dans ce genre
select sum(Area(plan_eau.obj, "sq m")) from plan_eau, departement where plan_eau.Obj Within departement.Obj and departement.Champ1="1"
et ça marche pour le departement 1
Ensuite si tu veux une ventilation pour tous tes départements
select departement.Champ1, sum(Area(plan_eau.obj, "sq m")) from plan_eau, departement where plan_eau.Obj Within departement.Obj group by departement.Champ1
J'espère que ça t'aidera
Bon courage
Dernière modification par cyril_c (Fri 04 February 2011 12:42)
Hors ligne
#5 Fri 04 February 2011 12:48
- GeoPopulation
- Participant occasionnel
- Date d'inscription: 17 May 2009
- Messages: 14
Re: Requête entre deux tables : somme des aires
C'est presque parfait, en fait j'ai autant de résultats que d'objets dans PLAN_EAU. Par exemple id2 0.01 ; id2 0.44 ; id2 0.03 id2 ... Je cherche donc maintenant à avoir le total pour chaque ID departement.
Hors ligne
#7 Fri 04 February 2011 14:06
- GeoPopulation
- Participant occasionnel
- Date d'inscription: 17 May 2009
- Messages: 14
Re: Requête entre deux tables : somme des aires
En fait c'est juste le group by. Il suffit de grouper par departement.id
Merci beaucoup cyril_c
Hors ligne
#8 Thu 10 February 2011 20:14
- GeoPopulation
- Participant occasionnel
- Date d'inscription: 17 May 2009
- Messages: 14
Re: Requête entre deux tables : somme des aires
Bonsoir,
Je souhaiterais aller encore un peu plus loin dans ma requête mais je ne sais pas si cela est possible...
En fait, j'ai détaillé ma carte PLAN_EAU avec un champ NATURE. Maintenant j'aimerai pouvoir retourner dans une table departement.ID en ligne et en colonne les différents attributs que l'on peut trouver dans le plan_eau.nature
Sauriez vous m'indiquer comment insérer la condition "calcul la somme des aires pour chaque attribut de plan_eau.nature" ?
Hors ligne
#9 Mon 14 February 2011 10:29
- michelbgy
- Participant actif
- Date d'inscription: 9 Feb 2010
- Messages: 77
Re: Requête entre deux tables : somme des aires
bonjour,
il y a toujours la possibilité dans la table "PLAN_EAU"de créer une colonne pour chaque type de "nature", de les mettre successivement à jour par la surface des objets concernés, puis de faire une sélection SQL comme précédemment en demandant la somme des surfaces pour chaque colonne
Mieux, un tableau croisé dynamique d'Excel (ou l'équivalent dans CALC) est exactement l'outil fait pour çà: en effet une fois la jointure géographique (plan d'eau/département) établie, çà devient un problème élémentaire de base de données.
Hors ligne