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

#1 Wed 25 June 2008 16:44

Julien MOISY
Juste Inscrit !
Date d'inscription: 3 Feb 2008
Messages: 8

Requête SQL Access

Bonjour,
Je voudrais effectuer une requête dans Access, mais je n'arrive pas à la faire dans le mode création. En revanche, je pense qu'il est possible de la faire en SQL, mais je n'y arrive pas. Voila mon problème :
Je veux faire la somme de plusieurs colonnes. J'ai une table qui décrit décrit des opérations immobilières avec un champs LOG_TOT qui indique le nombre total de logements dans l'opération et DATE_ACHEVEMENT qui indique la date d'achèvement des travaux de construction de l'opération immobilière. Hors, il se peut qu'il y ai des opérations immobilières dont la construction s'étale sur plusieurs années (la livraison des logements se fait donc sur plusieurs années). J'ai donc ajouté à ma table LOG_TOT 2 et LOG_TOT 3 ainsi que DATE_ACHEVEMENT 2 et DATE_ACHEVEMENT 3 ce qui permet de voir le nombre de logements pour une année "t" même si l'opération n'est pas complète.
Mais je n'arrive pas a faire la somme des logements achevés pour une année.

Voici le SQL de la requête simple :
SELECT Sum([HLM_Fleury-les-Aubrais].[LOG_TOT 1]) AS [SommeDeLOG_TOT 1], [HLM_Fleury-les-Aubrais].[DATE_ACHEVEMENT 1]
FROM [HLM_Fleury-les-Aubrais]
GROUP BY [HLM_Fleury-les-Aubrais].[DATE_ACHEVEMENT 1]
HAVING ((([HLM_Fleury-les-Aubrais].[DATE_ACHEVEMENT 1])="1986"));

Comment je fait pour aussi prendre en compte LOG_TOT 2 et LOG_TOT 3 dans cette requête?
Merci pour votre aide.
Julien

Configuration: Windows XP
Firefox 2.0.0.14
Access 2000

Hors ligne

 

#2 Wed 25 June 2008 17:05

greg-gwened
Participant actif
Lieu: Vannes
Date d'inscription: 4 Oct 2007
Messages: 148

Re: Requête SQL Access

Salut Julien,
je vois que toi aussi tu galere en cette fin d'aprem (jai posé un poste ds le forum esri)

Je pense qu'il faut que tu créé une ligne par bout d'opération.
Autrement dit, un nouveau champ ID_operation dans le quel tu peut mettre ton ancien identifiant (clé primaire) et un nouveau champ numero auto.
tu obtient une table ainsi construite:

ID               ID_operation           Annee                Nb Logement
1                     1                           97                         5
2                     1                           98                         3
3                     2                           84                         24
4                     2                           85                         6
5                     2                           86                         12

Bon courage à toi, on se voit à la rentrée
Jette un coup d'oeil sur mon post, on ne sait jamais

ciao
@+

Hors ligne

 

#3 Wed 25 June 2008 17:59

DCRAY
Juste Inscrit !
Lieu: Nice, France
Date d'inscription: 23 Dec 2005
Messages: 8

Re: Requête SQL Access

Bonjour,

Je ne sais pas si votre requête tombe dans l'idée d'une analyse croisée, mais peut être vous pouvez essayer ce type de construction :


TRANSFORM Sum([HLM_Fleury-les-Aubrais].[LOG_TOT 1])  AS [SommeDeLOG_TOT 1]
SELECT  [HLM_Fleury-les-Aubrais].[NOM_OPERATION], Sum([HLM_Fleury-les-Aubrais].[LOG_TOT 1]) AS [Total de LOG_TOT 1]
FROM [HLM_Fleury-les-Aubrais]
GROUP BY [HLM_Fleury-les-Aubrais].[NOM_OPERATION]
PIVOT[HLM_Fleury-les-Aubrais].[DATE_ACHEVEMENT];


Si vous créez un champ DATE_ACHEVEMENT avec juste la date d'achevement, et si vous avez, ou pouvez créer, un champ NOM_OPERATION, vous arriverez avec un resultat pivoter avec les années d'achevement comme noms des colonnes avec les sommes des logements dedans par année.

Je ne sais pas si ça peut vous aider, ou si je suis hors sujet, mais peut être ce peut déclenche les cellules gris.

Duncan

nb: il y a un autre mèthode si on as des connexions ODBC avec Oracle ou SQL Server pour les Analyses Croisées.

Hors ligne

 

#4 Thu 26 June 2008 09:24

ChristopheV
Membre
Lieu: Ajaccio
Date d'inscription: 7 Sep 2005
Messages: 3180
Site web

Re: Requête SQL Access

Bonjour,

Ben Julien c'est pas très clair tout ça, il me faut lire aussi le post de greg-gwened pour arriver à une esquisse du pb.

   Ajouter log_tot2 et autre c'est bien mais le jour où le chantier s'étale sur cinq ans on fait comment ? J'ajouterais plutôt une table "tranche" et un lien 1-n en me disant qu'une opération est composée de 1 à n tranches. Et là la requête devient beaucoup plus évidente.

A+


Christophe
L'avantage d'être une île c'est d'être une terre topologiquement close

Hors ligne

 

#5 Thu 26 June 2008 10:34

Julien MOISY
Juste Inscrit !
Date d'inscription: 3 Feb 2008
Messages: 8

Re: Requête SQL Access

Bonjour Christophe
j'ai à peu près compris ta solution, ça m'intéresse mais je ne sais pas du tout comment faire ça (Je suis en stage pour ma première année de master de géomatique). Qu'est-ce qu'un lien 1-n? Comment ont fait ça?
Dans la table tranche, tu mettrais l'identifiant de l'opération, l'année de réalisation et le nombre de logement par tranche?
Merci pour ton aide
Bonne journée

Hors ligne

 

#6 Thu 26 June 2008 11:37

ChristopheV
Membre
Lieu: Ajaccio
Date d'inscription: 7 Sep 2005
Messages: 3180
Site web

Re: Requête SQL Access

Bonjour,

Un lien 1-n entre A et B est une relation (jointure) entre la table A et la Table B. Elle se traduit par un objet A est composé de 1 à n objet B.

Pour créer une jointure il faut "lier" un champs de A à un Champs de B en général on utilise la clef primaire de A (Id_A) et un champs de type long sur B (ptr_A) .
Sous access il suffit de se placer dans la vue "relation" d'y ajouter la table A et la table B puis de faire glisser le champs Id_A sur le champs ptr_A (de B).

Pour le contenu de B t'as trouvé.

Table opérations : Id_operation (numauto) , nom string etc ...
Table Tranche : Id_Tranche, Date , nblogement, ptr_operation (long)

Quelles sont les tranches pour une date donnée ?

parameters madate DateTime;
Select * from operations INNER JOIN tranches ON operations.id_operation = tranche.ptr_operation
Where tranche.dateres = madate;

A+


Christophe
L'avantage d'être une île c'est d'être une terre topologiquement close

Hors ligne

 

Pied de page des forums

Powered by FluxBB