#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: 3199
- 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: 3199
- 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