banniere

Le portail francophone de la géomatique


Toujours pas inscrit ? Mot de passe oublié ?
Nom d'utilisateur    Mot de passe              Toujours pas inscrit ?   Mot de passe oublié ?

Annonce

Rencontres QGIS 2025

L'appel à participation est ouvert jusqu'au 19 janvier 2025!

#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

cyril_c
Participant assidu
Lieu: Périgueux
Date d'inscription: 13 Jan 2009
Messages: 176
Site web

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

 

#6 Fri 04 February 2011 13:09

cyril_c
Participant assidu
Lieu: Périgueux
Date d'inscription: 13 Jan 2009
Messages: 176
Site web

Re: Requête entre deux tables : somme des aires

regarde mon sql, c'est l'id_departement que tu dois mettre et non, l'id_plan_eau

tiens moi au courant

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

 

Pied de page des forums

Powered by FluxBB