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 23/05/2011, 11h49   #1
Invité de passage
 
Inscription : mai 2011
Messages : 6
Détails du profil
Informations forums :
Inscription : mai 2011
Messages : 6
Points : 1
Points : 1
Par défaut Compte d'enregistements sélectifs en relation.

Bonjour,

J'ai un problème dans une requêtes sous Access 2007 :

Les forces en présences :

1 Table RESEAUX avec clef sur champs "Code_Reseau"
1 table FACES avec clef sur champs "Code_Face"

Il y a 1 reseau pour N faces. La relation se fait entre le champs "Libelle_Reseau" de la table RESEAU, et le champs "Affectation_R" de la table FACES.

Dans ma requête :
J'ai (entre autre) le champs "Libelle_Reseau" de la table RESEAU, et le champs "Format" de la table FACES.

Ce qui donne :
Reseau_Dupont -- 400*300
Reseau_Martin -- 500*900


je veux pouvoir afficher dans ma requête un champs qui calculerait le nombre de fois (d'enregistrements) où la valeur "Libelle_Reseau" de chaque ligne de ma requête apparaîtrait dans le champs "Affectation_R de la table FACES.

Ex :

Table FACES :
Reseau_Dupont -- y -- x
Reseau_Martin -- y -- x
Reseau_Martin -- y -- x

La requêtre devrait donner :
Reseau_Dupont -- 400*300 -- 1
Reseau_Martin -- 500*900 -- 2


J'espère avoir été clair et vous remercie par avance de vos propositions.
J.claude
Access_Prime_time est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 23/05/2011, 13h04   #2
Expert Confirmé
 
Avatar de Richard_35
 
Homme
Inscription : juillet 2007
Messages : 2 176
Détails du profil
Informations personnelles :
Sexe : Homme
Localisation : France, Ille et Vilaine (Bretagne)

Informations forums :
Inscription : juillet 2007
Messages : 2 176
Points : 2 805
Points : 2 805
Bonjour Access_Prime_time,

Citation:
Envoyé par Access_Prime_time
La relation se fait entre le champs "Libelle_Reseau" de la table RESEAU, et le champs "Affectation_R" de la table FACES.
==> Tout d'abord, en termes de conception, la liasion avec un libellé est interdite. En effet, le libellé peut changer après liasion (faute d'orthographe, changement de nom, etc...). Il est donc impératif d'effectuer des liaisons avec des champs immuables. D'autant que tu as l'air d'avoir tout ce qu'il te faut... si j'ai bien compris :

Table RESEAUX
- Code_Reseau (clé primaire)
- Libelle_Reseau
...

Table FACES
- Code_Face (clé primaire)
- Code_Reseau ==> et non Libelle_Reseau
...

Relation
RESEAUX 1---∞ FACES, via Code_Reseau ==> et non Libelle_Reseau.

Ensuiite, via l'assistant, une requête qui lie RESEAUX à FACES, via Code_Reseau, groupée par Code_Reseau avec Count(*) devrat te donner ce que tu souhaites.
__________________
Dis-nous et à bientôt,
Richard.
----------------------------------------------------------------------------------------------
En cas de résolution, et afin de faciliter la tâche des bénévoles, merci de cliquer sur .
et permettent aux forumeurs de cibler leur recherche dans une discussion : n'hésitez pas à voter !
Richard_35 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 23/05/2011, 16h24   #3
Invité de passage
 
Inscription : mai 2011
Messages : 6
Détails du profil
Informations forums :
Inscription : mai 2011
Messages : 6
Points : 1
Points : 1
Merci Richard,

Au temps pour moi, non seulement je me suis trompé dans mon énoncé mais votre remarque m'aura permis de corriger certaines choses :
J'ai

Table RESEAUX
- Code_Reseau
- Libelle_Reseau (clé primaire)
...

Table FACES
- Code_Face (clé primaire)
-Affectation_R


Ma relation est faite entre :
Table RESEAUX- Libelle_Reseau (clé primaire)
& Table FACES - Affectation_R

Là je peux sans problème faire mes requêtes, ça fonctionne. Pas de possibilité de se tromper puisque Affectation_R est une liste limitée au Libelle_Reseau.(Je dois impérativement les nommer différemment suivant la table où ils se trouvent)

Dans ma requêtes je liste TOUS les réseaux de la Table RESEAUX + quelques champs de Table FACES. Là c'est ok. Par contre il me faut un champ supplémentaire dans cette requête qui sera le nombre d'enregistrement dans la Table FACES pour chaque Libelle_Reseau ou Affectation_R sortis dans la requête et se trouvant dans Table FACES.

Exemple :
Je ne peux avoir qu'1 seul Libelle-Reseau, dans lequel il y aura plusieurs faces. Je peux avoir le Réseau_Martin et le Réseau_Dupont etc. Ils vont sortir dans ma requête. Mais comme un Réseau comprend plusieurs faces, Réseau_Martin peut exister 200 fois dans la Table FACES (sous le même Code_Face). Et c'est ce nombre que je dois avoir dans ma requête, et pour chaque ligne suivant le Libelle_Reseau ou Affectation_R.

PS: Je connais un petit peu le SQL mais ne suis pas capable de produire une syntaxe correcte quand cela se complique.
Access_Prime_time est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 23/05/2011, 16h44   #4
Expert Confirmé
 
Avatar de Richard_35
 
Homme
Inscription : juillet 2007
Messages : 2 176
Détails du profil
Informations personnelles :
Sexe : Homme
Localisation : France, Ille et Vilaine (Bretagne)

Informations forums :
Inscription : juillet 2007
Messages : 2 176
Points : 2 805
Points : 2 805
Citation:
Envoyé par Access_Prime_time
.../... Pas de possibilité de se tromper puisque Affectation_R est une liste limitée au Libelle_Reseau .../...
==> Imagines la situation suivante :
- tu crées 1 RESEAU avec Libelle_Reseau="Libelé du réseau xxx" ;
- tu lui associes 10 FACES (via Libelle_Reseau, donc) ;
- tu t'aperçois qu'il y a une faute d'orthographe dans "Libelé du réseau xxx" ;
- tu corriges cette faute en "Libellé du réseau xxx" ;
==> que penses-tu qu'il se passe ?... eh bien, tu perds tous tes liens avec FACES.

Donc, impérativement :
Table RESEAUX
- Code_Reseau (clé primaire)
- Libelle_Reseau (clé primaire)
...

Table FACES
- Code_Face (clé primaire)
-Affectation_R ==> qui doit contenir Code_Reseau


Ma relation est doit être faite entre :
Table RESEAUX- Libelle_Reseau Code_Reseau (clé primaire)
& Table FACES - Affectation_R


Citation:
Envoyé par Access_Prime_time
PS: Je connais un petit peu le SQL mais ne suis pas capable de produire une syntaxe correcte quand cela se complique.
==> il faut donc que tu utilises l'assistant graphique : une requête qui lie RESEAUX à FACES, via Code_Reseau/Affectation_R, groupée par Code_Reseau avec Count(*) devrait te donner ce que tu souhaites.
__________________
Dis-nous et à bientôt,
Richard.
----------------------------------------------------------------------------------------------
En cas de résolution, et afin de faciliter la tâche des bénévoles, merci de cliquer sur .
et permettent aux forumeurs de cibler leur recherche dans une discussion : n'hésitez pas à voter !
Richard_35 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 23/05/2011, 19h40   #5
Invité de passage
 
Inscription : mai 2011
Messages : 6
Détails du profil
Informations forums :
Inscription : mai 2011
Messages : 6
Points : 1
Points : 1
Ok richard, je vois ce que vous voulez dire pour les liens. Mais en fait c'est plus compliqué dans la pratique. Bref, j'ai une liste choix pour les réseaux et cela ne doit pas bouger.Merci du conseil. Mon impératif du moment est d'avoir ce champ dans ma requêtes qui compte le nombre d'enregistrements par Affectation_R.

Par contre lorsque vous dites :

Citation:
Envoyé par Richard_35
il faut donc que tu utilises l'assistant graphique : une requête qui lie RESEAUX à FACES, via Code_Reseau/Affectation_R, groupée par Code_Reseau avec Count(*) devrait te donner ce que tu souhaites.
J'ai donc fait l'assitant de requête et j'y ai mis mes champs. Là, OK.J'ai bien essayé de rajouter le champs "Affectation_R" avec Compte dans "opération" mais il m'impose le regroupement de tous les autres champs. Ce que j'ai donc fait. Mais il me sort le chiffre 1 pour chaque Affectation_R ?? Comment et où placer ce fameux count ? Désolé pour mon ignorance crasse mais je bloque.
Access_Prime_time est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 23/05/2011, 20h05   #6
Expert Confirmé
 
Avatar de Richard_35
 
Homme
Inscription : juillet 2007
Messages : 2 176
Détails du profil
Informations personnelles :
Sexe : Homme
Localisation : France, Ille et Vilaine (Bretagne)

Informations forums :
Inscription : juillet 2007
Messages : 2 176
Points : 2 805
Points : 2 805
Avec le Count(*), il ne faut QUE les champs concernés par le groupe que tu veux compter.

Donc :
une requête qui lie RESEAUX à FACES, via Code_Reseau/Affectation_R, groupée par Code_Reseau avec, uniquement :
- Libelle_Reseau
- Format
- Count(*)
==> ce qui devrait te donner, dans ton exemple :

Code :
1
2
3
Libelle_Reseau   Format   Count(*) 
Reseau_Dupont    400*300  1
Reseau_Martin    500*900  2
__________________
Dis-nous et à bientôt,
Richard.
----------------------------------------------------------------------------------------------
En cas de résolution, et afin de faciliter la tâche des bénévoles, merci de cliquer sur .
et permettent aux forumeurs de cibler leur recherche dans une discussion : n'hésitez pas à voter !
Richard_35 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 23/05/2011, 22h54   #7
Invité de passage
 
Inscription : mai 2011
Messages : 6
Détails du profil
Informations forums :
Inscription : mai 2011
Messages : 6
Points : 1
Points : 1
Vraiment désolé mais il va falloir me parler comme si j'avais 5 ans

Quand vous dites une requête qui lie, je ne vois pas comment une requête peut lier quelque chose. Groupé par CodeRéseau ne me dit rien non plus.
Vous parlez de mes 2 champs :
- Libelle_Reseau
- Format

Mais où mettre le count(*) ??, et aussi comment ?
Access_Prime_time est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 24/05/2011, 09h34   #8
Expert Confirmé
 
Avatar de Richard_35
 
Homme
Inscription : juillet 2007
Messages : 2 176
Détails du profil
Informations personnelles :
Sexe : Homme
Localisation : France, Ille et Vilaine (Bretagne)

Informations forums :
Inscription : juillet 2007
Messages : 2 176
Points : 2 805
Points : 2 805
Bonjour Access_Prime_time,

Il faudrait que tu jettes un coup d'oeil sur les tutos concernant les requêtes et
les jointures. C'est très bien expliqué et cela te donnera des bases précieuses.

Reviens après ce petit tour de formation.
__________________
Dis-nous et à bientôt,
Richard.
----------------------------------------------------------------------------------------------
En cas de résolution, et afin de faciliter la tâche des bénévoles, merci de cliquer sur .
et permettent aux forumeurs de cibler leur recherche dans une discussion : n'hésitez pas à voter !
Richard_35 est déconnecté   Envoyer un message privé Réponse avec citation 10
Vieux 24/05/2011, 10h23   #9
Invité de passage
 
Inscription : mai 2011
Messages : 6
Détails du profil
Informations forums :
Inscription : mai 2011
Messages : 6
Points : 1
Points : 1
Merci Richard,

J'ai réussi à faire une requête avec ce fameux count(*) et regroupement sur Affectation_R. Cela fonctionne. (La nuit porte conseil )
Par contre lorsque je rajoute des champs, il me sort cette erreur :
"Vous avez essayé d'exécuter une requête ne comprenant pas l'expression spécifié -Libelle_Afficheur" - comme une partie de la fonction d'agrégat.
Si je fais Ok, il me redonne cette erreur sur TOUS les champs que j'ai ajouté à ma requête.
Access_Prime_time est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 24/05/2011, 10h40   #10
Expert Confirmé
 
Avatar de Richard_35
 
Homme
Inscription : juillet 2007
Messages : 2 176
Détails du profil
Informations personnelles :
Sexe : Homme
Localisation : France, Ille et Vilaine (Bretagne)

Informations forums :
Inscription : juillet 2007
Messages : 2 176
Points : 2 805
Points : 2 805
Il est impératif de respecter une analogie évidente entre la clause WHERE et la clause GROUP BY.

Dans l'assistant :
- tous les champs choisis font partie du groupe que tu veux analyser ==> mention "regroupement" ;
- tous les autres champs sont des champs calculés en fonction du groupe choisi ==> mention "Expression", "Somme", etc...

En SQL :
Code sql :
.../... SELECT X, Y, Z, sum(A), count(*) .../...
Code sql :
.../... GROUP BY X, Y, Z .../...
En clair, les champs non calculés du SELECT doivent impérativement se retouver dans le GROUP BY.
__________________
Dis-nous et à bientôt,
Richard.
----------------------------------------------------------------------------------------------
En cas de résolution, et afin de faciliter la tâche des bénévoles, merci de cliquer sur .
et permettent aux forumeurs de cibler leur recherche dans une discussion : n'hésitez pas à voter !
Richard_35 est déconnecté   Envoyer un message privé Réponse avec citation 10
Vieux 24/05/2011, 12h04   #11
Invité de passage
 
Inscription : mai 2011
Messages : 6
Détails du profil
Informations forums :
Inscription : mai 2011
Messages : 6
Points : 1
Points : 1
OK, tout fonctionne. Pour que cela serve à d'autre j'explique mon erreur :

Dans l'assistant je prenais mes champs à la suite comme je voulais qu'ils soient vu à l'écran.
J'ai donc recommencé en mettant d'abord mes champs calculés, puis à la suite les autres champs. Et je n'ai plus d'erreur d'agrégat. A ma charge d'agencer mes champs dans le formulaire.

Merci Richard pour votre patience et les solutions apportés.
Access_Prime_time 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 15h07.


 
 
 
 
Partenaires

Hébergement Web