Twitter iPhone pliant OnePlus 11 PS5 Disney+ Orange Livebox Windows 11

requete et relation de table sous access 2003

4 réponses
Avatar
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

4 réponses

Avatar
Dragan
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


Avatar
Dragan
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
Avatar
gilou
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


Avatar
Dragan
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.