requete et relation de table sous access 2003

Le
gilou
Bonjour à tous
je suis à la recherche d'un conseil pour la récupération de donnéés dans
deux tables ayant une relation un à plusieurs.

T_audit : un numauto+ divers champs
T_defaut : un numerique ( num_auto de la T_defaut)
Une relation du type un à plusieurs , pour un audit il peut y avoir
plusieurs defauts.

mon souci est que je cherche à retourner via une requete , le resultat
suivant .

sur une meme ligne je voudrais le num_ auto de l'audit + tous les defauts
qui y sont rattachés.
Mais quand je créér ma requete pour generer des stats sur le nombre d'audits
avec defauts il me retourne des doublons , exemple pour l'audit n°1 j'ai 5
defauts ,
donc quand le lance ma requete je me retrouve avec cinq lignes .

comment est il possible de ne faire écrire qu'une ligne avec tous les
defauts à la place de une ligne pour chaque defauts.


j'espère avoir été le plus clair possible et je vous remercie d'avance pour
tous vos conseils.
Bonne journée
Vos réponses
Gagnez chaque mois un abonnement Premium avec GNT : Inscrivez-vous !
Trier par : date / pertinence
Dragan
Le #17607801
bonjour Gilou, quels sont les champs que tu souhaites retourner dans ta
requête ?
en fait combien de champs représentent les défauts ?


"gilou" a écrit :

Bonjour à tous
je suis à la recherche d'un conseil pour la récupération de donnéés dans
deux tables ayant une relation un à plusieurs.

T_audit : un numauto+ divers champs
T_defaut : un numerique ( num_auto de la T_defaut)
Une relation du type un à plusieurs , pour un audit il peut y avoir
plusieurs defauts.

mon souci est que je cherche à retourner via une requete , le resultat
suivant .

sur une meme ligne je voudrais le num_ auto de l'audit + tous les defauts
qui y sont rattachés.
Mais quand je créér ma requete pour generer des stats sur le nombre d'audits
avec defauts il me retourne des doublons , exemple pour l'audit n°1 j'ai 5
defauts ,
donc quand le lance ma requete je me retrouve avec cinq lignes .

comment est il possible de ne faire écrire qu'une ligne avec tous les
defauts à la place de une ligne pour chaque defauts.


j'espère avoir été le plus clair possible et je vous remercie d'avance pour
tous vos conseils.
Bonne journée


Dragan
Le #17610501
Pour exemple :
si la table T_DEFAUT a une clé primaire et qu'il n'y a qu'un seul champ pour
les défauts
essaie ça :

Ici j'appelle CLE le nom de la cle primaire de la table T_DEFAUT
AUDIT le nom du champ de T_AUDIT présent dans T_DEFAUT
DEFAUT le nom de la colonne des défauts de la table T_DEFAUT


TRANSFORM Min(DEFAUT)
SELECT AUDIT FROM (requete1)
GROUP BY AUDIT
PIVOT DEFAUTINDICE;

où requete1 =>
SELECT T_DEFAUT.AUDIT, "Défaut " & 1+count(B.AUDIT) As DEFAUTINDICE,
T_DEFAUT.DEFAUT
FROM T_DEFAUT
LEFT JOIN T_DEFAUT As B ON B.AUDIT=T_DEFAUT.AUDIT AND B.CLE<T_DEFAUT.CLE
GROUP BY _DEFAUT.AUDIT, T_DEFAUT.DEFAUT



tu obtiendras en sortie quelque chose comme ça.

AUDIT Défaut 1 Défaut 2 Défaut 3 Défaut 4 Défaut 5
1 titi tata tete tutu tyty
2 toto gigi rrrr
3 ggg
gilou
Le #17613791
Merci dragan de répondre à mon problème.
Pour la table defaut je n'ai pas de cle primaire ,je stock simplement le
num_auto de ma table defaut en numerique cela me suffit.

Par contre ma table defaut comporte 2 champ pour identifier les defaut :
1 champ libelle
1 champ caractéristique

Pour ce qui est de ta réponse ,je n'ai pas les connaissances pour
interpréter ton code sql , mais je vais essayer de déchiffer en cherchant sur
la toile.
je construit habituellement mes requetes à l'aide de l'utilitaire access par
l'ajout des tables et leurs champs.

Merci encore .
Si je coince je reviendrai de nouveau vers vous.
Bon vent !


"Dragan" a écrit :

Pour exemple :
si la table T_DEFAUT a une clé primaire et qu'il n'y a qu'un seul champ pour
les défauts
essaie ça :

Ici j'appelle CLE le nom de la cle primaire de la table T_DEFAUT
AUDIT le nom du champ de T_AUDIT présent dans T_DEFAUT
DEFAUT le nom de la colonne des défauts de la table T_DEFAUT


TRANSFORM Min(DEFAUT)
SELECT AUDIT FROM (requete1)
GROUP BY AUDIT
PIVOT DEFAUTINDICE;

où requete1 =>
SELECT T_DEFAUT.AUDIT, "Défaut " & 1+count(B.AUDIT) As DEFAUTINDICE,
T_DEFAUT.DEFAUT
FROM T_DEFAUT
LEFT JOIN T_DEFAUT As B ON B.AUDIT=T_DEFAUT.AUDIT AND B.CLE<T_DEFAUT.CLE
GROUP BY _DEFAUT.AUDIT, T_DEFAUT.DEFAUT



tu obtiendras en sortie quelque chose comme ça.

AUDIT Défaut 1 Défaut 2 Défaut 3 Défaut 4 Défaut 5
1 titi tata tete tutu tyty
2 toto gigi rrrr
3 ggg


Dragan
Le #17614331
ok, en fait quand tu crées une requete tu peux taper le code SQL en cliquant
sur "SQL" du menu. Nouvelle Requete - Mode Création - Fermer la boite de
dialogue de choix des tables - Clique SQL dans le menu.
puis tu écris ceci pour tester: remplace caracteristique, numauto et
Libelle par les noms correctes de la table.

TRANSFORM Min(caracteristique)
SELECT numauto FROM T_DEFAUT
GROUP BY numauto
PIVOT Libelle;

les requetes PIVOT transforme une table de y lignes en une table de y
colonnes.
En clair, lorsque tu obtiens 5 lignes de défaut pour un audit, tu auras une
ligne de 6 colonnes. Une colonne pour le champ du numauto et 5 colonnes pour
les libelles des defauts.
Publicité
Poster une réponse
Anonyme