Précédent   Forum des professionnels en informatique > Logiciels > Microsoft Office > Access > Requêtes et SQL.
Requêtes et SQL. Tout ce qui concerne vos questions sur les requêtes et le SQL sous Access se trouve ici.
Partagez cette discussion sur d'autres réseaux sociaux : Viadeo Twitter Google Facebook Digg Delicious MySpace Yahoo
Réponse Proposer ce sujet en actualité
 
Outils de la discussion
Publicité
'
Vieux 04/11/2011, 19h06   #1
Candidat au titre de Membre du Club
 
Inscription : avril 2009
Messages : 113
Détails du profil
Informations personnelles :
Âge : 27
Localisation : France, Puy de Dôme (Auvergne)

Informations forums :
Inscription : avril 2009
Messages : 113
Points : 11
Points : 11
Par défaut Requête sur plusieurs tables

Bonjour,

Je travaille actuellement sur Access après un long moment...la reprise est dure...
Et je n'arrive plus à faire une requête.
Je m'explique :
- j'ai une table COMMUNE
- j'ai une table RUES, avec un ID unique me permettant de faire une jointure avec la table COMMUNE
- j'ai une table TROTTOIR avec un ID Rue me permettant de la relier à la table RUES et un champ COUT répertoriant le montant des travaux à effectuer. Chaque portion de trottoir a un ID unique.
- j'ai une table OBSTACLE avec un ID Rue me permettant de la relier à la table RUES et un champ COUT répertoriant le montant des travaux à effectuer. Chaque obstacle a un ID unique.

Mon objectif est de créer un tableau me donnant par rue la somme totale des travaux pour les TROTTOIRS et les OBSTACLES.

Pour l'instant, si j'essaie de faire ma requête, j'obtiens des valeurs fausses. J'ai l'impression que le logiciel multiplie le nombre de portions de trottoir par le coût...
Par exemple, la rue Martin se compose de 3 tronçons. La somme des coûts est de 20 000 € pour les trottoirs.
Il y a 5 obstacles et le coût devrait être de 15 000 €. Or, dans le tableau que j'obtiens, j'ai 45 000 € (il a multiplié le nombre de tronçons par le coût des obstacles : 3*15000).

Voici la requête que je fais :
Code sql :
1
2
3
SELECT COMMUNE.NOM_COMMUNE, RUES.NOMS, Sum(TROTTOIR.COUT) AS SommeDeCOUT, Sum(OBSTACLE_FIXE.COUT) AS SommeDeCOUT1
FROM ((COMMUNE INNER JOIN RUES ON COMMUNE.Num_COMMUNE = RUES.Num_COMMUNE) INNER JOIN TROTTOIR ON RUES.ID_RUE = TROTTOIR.Num_RUE) INNER JOIN OBSTACLE_FIXE ON RUES.ID_RUE = OBSTACLE_FIXE.Num_RUE
GROUP BY COMMUNE.NOM_COMMUNE, RUES.NOMS;

Est-ce que quelqu'un pourrait me venir en aide SVP ?

Merci
Razorback est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 04/11/2011, 20h01   #2
Expert Confirmé Sénior
 
Avatar de f-leb
 
Homme Fabien
Enseignant
Inscription : janvier 2009
Messages : 2 415
Détails du profil
Informations personnelles :
Nom : Homme Fabien
Âge : 41
Localisation : France, Sarthe (Pays de la Loire)

Informations professionnelles :
Activité : Enseignant

Informations forums :
Inscription : janvier 2009
Messages : 2 415
Points : 4 447
Points : 4 447
bonsoir,

Citation:
il a multiplié le nombre de tronçons par le coût des obstacles : 3*15000)
c'est bien ce qu'il fait

avec Dsum, essaye:

Code sql :
1
2
3
4
5
6
7
SELECT 
COMMUNE.NOM_COMMUNE,
RUES.NOMS,
DSum("COUT", "TROTTOIR", "Num_RUE=" & RUES.ID_RUE) AS TotalTrottoir,
DSum("COUT", "OBSTACLE_FIXE", "Num_RUE=" & RUES.ID_RUE) AS TotalObstacle
FROM RUES INNER JOIN COMMUNE
ON COMMUNE.Num_COMMUNE = RUES.Num_COMMUNE;
f-leb est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 04/11/2011, 20h20   #3
Candidat au titre de Membre du Club
 
Inscription : avril 2009
Messages : 113
Détails du profil
Informations personnelles :
Âge : 27
Localisation : France, Puy de Dôme (Auvergne)

Informations forums :
Inscription : avril 2009
Messages : 113
Points : 11
Points : 11
Merci de votre réponse !

C'est exactement ce que je voulais !

Merci beaucoup et bonne soirée
Razorback est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 04/11/2011, 20h42   #4
Candidat au titre de Membre du Club
 
Inscription : avril 2009
Messages : 113
Détails du profil
Informations personnelles :
Âge : 27
Localisation : France, Puy de Dôme (Auvergne)

Informations forums :
Inscription : avril 2009
Messages : 113
Points : 11
Points : 11
Oups...
Juste une autre question complémentaire...

J'ai également une table PASSAGE_PIETONS, toujours comportant l'ID de la rue.
Mais par contre, je dispose d'une table ABAISSE (abaissé de trottoir) qui est uniquement relié à la table PASSAGE_PIETONS par l'ID du passage en question...

Est-ce qu'il est possible de rajouter la colonne COUT de la table ABAISSE à la suite pour chaque rue ?

J'ai testé çà sans succès :
Code :
1
2
3
4
5
6
7
8
9
SELECT 
COMMUNE.NOM_COMMUNE,
RUES.NOMS,
DSum("COUT", "TROTTOIR", "Num_RUE=" & RUES.ID_RUE) AS TotalTrottoir,
DSum("COUT", "OBSTACLE_FIXE", "Num_RUE=" & RUES.ID_RUE) AS TotalObstacle,
DSum("COUT", "PASSAGE_PIETONS", "Num_RUE=" & RUES.ID_RUE) AS TotalPPiet,
DSum("COUT", "ABAISSE", "Num_PP=" & RUES.ID_RUE) AS TotalAB
FROM RUES INNER JOIN COMMUNE
ON COMMUNE.Num_COMMUNE = RUES.Num_COMMUNE;
Merci
Razorback est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 04/11/2011, 21h33   #5
Expert Confirmé Sénior
 
Avatar de f-leb
 
Homme Fabien
Enseignant
Inscription : janvier 2009
Messages : 2 415
Détails du profil
Informations personnelles :
Nom : Homme Fabien
Âge : 41
Localisation : France, Sarthe (Pays de la Loire)

Informations professionnelles :
Activité : Enseignant

Informations forums :
Inscription : janvier 2009
Messages : 2 415
Points : 4 447
Points : 4 447
oulaaa,

Code sql :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
 
SELECT 
COMMUNE.NOM_COMMUNE,
RUES.NOMS,
DSum("COUT", "TROTTOIR", "Num_RUE=" & RUES.ID_RUE) AS TotalTrottoir,
DSum("COUT", "OBSTACLE_FIXE", "Num_RUE=" & RUES.ID_RUE) AS TotalObstacle,
DSum("COUT", "PASSAGE_PIETONS", "Num_RUE=" & RUES.ID_RUE) AS TotalPPiet,
(
   SELECT Sum(ABAISSE.COUT) FROM
   PASSAGE_PIETONS INNER JOIN ABAISSE
   ON PASSAGE_PIETONS.ID_PP=ABAISSE.NUM_PP
   WHERE PASSAGE_PIETONS.NUM_RUE= RUES.ID_RUE
) AS TotalAB
FROM RUES INNER JOIN COMMUNE
ON COMMUNE.Num_COMMUNE = RUES.Num_COMMUNE;
f-leb est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 04/11/2011, 21h41   #6
Candidat au titre de Membre du Club
 
Inscription : avril 2009
Messages : 113
Détails du profil
Informations personnelles :
Âge : 27
Localisation : France, Puy de Dôme (Auvergne)

Informations forums :
Inscription : avril 2009
Messages : 113
Points : 11
Points : 11
Encore merci pour tout !

C'est parfait...
Pour que je comprenne, c'est une sorte de requête imbriquée (sous-requête ?) ?

Merci encore et bonne soirée
Razorback est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 05/11/2011, 22h36   #7
Expert Confirmé Sénior
 
Avatar de f-leb
 
Homme Fabien
Enseignant
Inscription : janvier 2009
Messages : 2 415
Détails du profil
Informations personnelles :
Nom : Homme Fabien
Âge : 41
Localisation : France, Sarthe (Pays de la Loire)

Informations professionnelles :
Activité : Enseignant

Informations forums :
Inscription : janvier 2009
Messages : 2 415
Points : 4 447
Points : 4 447
Citation:
Envoyé par Razorback Voir le message
Pour que je comprenne, c'est une sorte de requête imbriquée (sous-requête ?) ?
voui, c'est bien ça

Code :
...WHERE PASSAGE_PIETONS.NUM_RUE= RUES.ID_RUE
imbriquée et corrélée avec la requête principale.
f-leb est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse Proposer ce sujet en actualité Cette discussion est résolue.
Outils de la discussion



Fuseau horaire GMT +2. Il est actuellement 06h15.


 
 
 
 
Partenaires

Hébergement Web