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

GEODATA DAYS 2024

#1 Fri 26 February 2010 19:51

Eric C.
Juste Inscrit !
Lieu: Caen
Date d'inscription: 3 Feb 2009
Messages: 2

requête SQL pour linéaire de réseau

Bonjour,

J'utilise actuellement une requête SQL qui me permet d'interroger ma base Oracle et de connaître le linéaire de réseau contenu dans mon SIG par commune et par type de réseau :

select sum(tr_longueur)/1000 || 'm',CCOCOM, re_ident from as_troncon group by re_ident,CCOCOM order by CCOCOM;



Je voudrais utiliser la meme requête mais en ajoutant le paramètre "Diamètre" de manière à connaître le linéaire de réseau par commune, par type de réseau et par diamètre.

Les diametres des tronçons sont contenu dans l'attribut "TR_DIAMETRE".

Je ne parviens pas à construire cette requête SQL.

Est ce que quelqu'un peut me venir en aide ?

Cordialement.


Eric Charles
Chargé d'études et suivi Direction Eau et Assainissement - Communauté d'agglomération Caenlamer
Tél. +332 14 37 28 27 | Fax. +332 31 75 49 95

Hors ligne

 

#2 Fri 26 February 2010 23:02

ThomasG
Membre
Lieu: Nantes
Date d'inscription: 9 Sep 2005
Messages: 946
Site web

Re: requête SQL pour linéaire de réseau

Bonsoir,


Normalement pour faire un GROUP BY sans problème, il est conseillé de faire une requête de la forme

Code:

SELECT colonne1,colonne2,colonne3,operateuraggregat(valeur) FROM votretable GROUP BY colonne1,colonne2,colonne3

où colonne1,colonne2,colonne3 sont les champs qui permettent de faire le tri,
operateuraggregat(valeur) peut être un max,une sum,(...) de la colonne valeur

Cette forme répond en reprenant votre formulation à la question, si on a choisit une somme
"Je veux la somme des valeurs contenues dans mon SIG par colonne1, par colonne2 et par colonne3"

Appliqué à votre cas,

Code:

select CCOCOM, re_ident, TR_DIAMETRE, sum(tr_longueur)/1000 || 'm' from as_troncon group by re_ident,CCOCOM,TR_DIAMETRE order by CCOCOM;

La théorie rejoint la pratique? Merci de votre retour

Une remarque en dehors de la réponse directe à votre question.
Si vous le pouvez, uniformisez la "casse" de vos noms de champs, c'est à dire mettez tous vos champs en majuscules ou minuscules. Utilisant PostgreSQL, je préfère les minuscules. Cette préconisation fait pour moi partie des "bonnes pratiques" (Plus d'infos sur les conventions de nommage http://www.forumsig.org/showthread.php?t=17269 )
Pour Oracle, je ne sais pas quelles sont les règles pour la casse mais vous garderez un code plus lisible en vous fixant ce type de règles.

Cordialement

ThomasG

Hors ligne

 

Pied de page des forums

Powered by FluxBB