[ACCESS] Requête Ajout

Résolu/Fermé
JeanPierreKoffe - Modifié par JeanPierreKoffe le 2/08/2012 à 10:28
 JeanPierreKoffe - 4 août 2012 à 11:28
Bonjour à tous,

je viens sur le forum pour résoudre un petit souci que je rencontre avec ma base ACCESS (format 2002) :

J'ai une table [LISTE] contenant comme champs :

ID_ACHAT (clé primaire)
ID_CLIENT (il peut y avoir plusieurs lignes contenant le même id client
L_PRODUIT (libellé du produit : soit un produit parmi [CHAUSSURES/BONNET/VESTE] par ligne)
DERN_DATE_ACHAT (date du dernier achat d'un produit du type L_PRODUIT)
NOMBRE_ACHAT (Nombre total d'achat de produit de ce type par ce client)

Mon problème : je voudrai pouvoir déterminer quel est le produit "Principal" de chaque client au sein d'une nouvelle colonne.
Le produit principal est défini d'abord en fonction du plus grand nombre de produit de ce type acheté par un même client, puis si il y a "égalité" avec la date d'achat la plus récente.

J'ai plus ou moins réussi à résoudre mon problème en faisant 3 requêtes :

-Dans une premieres requête sélection je trie par id client "ascendant" puis par NOMBRE_ACHAT "descendant" puis par DERN_DATE_ACHAT "descendant"

-Dans une deuxième requête création de table, basée sur la requête précédente, je prends l'id client et le "FIRST" L_PRODUIT que j'affiche dans une table [PRINCIPALE]

-Enfin, dans une dernière requête "UPDATE" je fais une jointure stricte entre [LISTE] et [PRINCIPALE] puis je crée un nouveau champs sur [LISTE] appelé "PRODUIT_PRINCIPAL" que je fixe à "P"

D'ou ma question : est t'il possible de faire le contenu dans 3 requête au sein d'une seule et même requête ?

Merci d'avance

7 réponses

Le Pingou Messages postés 12035 Date d'inscription mercredi 11 août 2004 Statut Contributeur Dernière intervention 1 avril 2024 1 425
2 août 2012 à 13:27
Bonjour,
En vous lisant, vous créé autant de table qu'il y a de client par produit principale, est-ce bien cela ?
Pourquoi ne pas avoir une table pour les produits principaux ou vous enregistrez le client, le produit et la date ?
0
JeanPierreKoffe
2 août 2012 à 14:08
Bonjour,

j'ai du mal m'exprimé.
Soit, pour exemple, la table suivante :

ID_ACHAT ID_CLIENT PRODUIT DERN_DATE_ACHAT NOMBRE
1 1 VESTE 30/06/2012 2
2 1 CHAUSSURES 24/04/2012 2
3 1 BONNET 30/05/2012 1
4 2 CHAUSSURES 27/11/2011 2
5 2 BONNET 15/12/2011 1
6 3 CHAUSSURES 03/05/2012 2
7 4 VESTE 07/04/2012 2
8 5 VESTE 24/02/2012 1
9 5 BONNET 24/02/2012 2
10 6 VESTE 02/06/2012 1
11 6 CHAUSSURES 20/03/2012 3
12 6 BONNET 04/05/2012 1

Aprés ma première requête (sélection) je vais avoir la table suivante :

ID_ACHAT ID_CLIENT PRODUIT DERN_DATE_ACHAT NOMBRE
1 1 VESTE 30/06/2012 2
2 1 CHAUSSURES 24/04/2012 2
3 1 BONNET 30/05/2012 1
4 2 CHAUSSURES 27/11/2011 2
5 2 BONNET 15/12/2011 1
6 3 CHAUSSURES 03/05/2012 2
7 4 VESTE 07/04/2012 2
9 5 BONNET 24/02/2012 2
8 5 VESTE 24/02/2012 1
11 6 CHAUSSURES 20/03/2012 3
10 6 VESTE 02/06/2012 1
12 6 BONNET 04/05/2012 1

Aprés ma requête création de table j'aurai :

ID_ACHAT ID_CLIENT PRODUIT DERN_DATE_ACHAT NOMBRE
1 1 VESTE 30/06/2012 2
4 2 CHAUSSURES 27/11/2011 2
6 3 CHAUSSURES 03/05/2012 2
7 4 VESTE 07/04/2012 2
9 5 BONNET 24/02/2012 2
11 6 CHAUSSURES 20/03/2012 3

Enfin, aprés ma requête ajout je vais avoir :

ID_ACHAT ID_CLIENT PRODUIT DERN_DATE_ACHAT NOMBRE PRODUIT_PRINCIPAL
1 1 VESTE 30/06/2012 2 P
2 1 CHAUSSURES 24/04/2012 2
3 1 BONNET 30/05/2012 1
4 2 CHAUSSURES 27/11/2011 2 P
5 2 BONNET 15/12/2011 1
6 3 CHAUSSURES 03/05/2012 2 P
7 4 VESTE 07/04/2012 2 P
9 5 BONNET 24/02/2012 2 P
8 5 VESTE 24/02/2012 1
11 6 CHAUSSURES 20/03/2012 3 P
10 6 VESTE 02/06/2012 1
12 6 BONNET 04/05/2012 1

Je ne crée donc pas plusieurs table par produit.

Par ailleurs, comme je l'ai expliqué, le produit principal est déterminé par rapport au contenu de la première table. Je ne peux donc pas créer une table Produit_Prinicpal par avance - sauf si je n'ai pas compris le sens de votre phrase :p
C'est peut être ma définition du produit principal qui vous gène, il n'existe pas de produit principal général, il faut considérer que chaque client a un type de produit qu'il affectionne le plus et que ce produit deviendra donc son produit dit "principal".
0
Le Pingou Messages postés 12035 Date d'inscription mercredi 11 août 2004 Statut Contributeur Dernière intervention 1 avril 2024 1 425
Modifié par Le Pingou le 2/08/2012 à 14:22
Bonjour,
Merci pour l'information.
Lorsque vous dite :
Dans une deuxième requête création de table
Cela veut dire que la requête va créer une table ....

Pouvez-vous mettre le code SQL des 3 requêtes, merci ?
Salutations.
Le Pingou
0
JeanPierreKoffe
2 août 2012 à 15:27
1ere requête (Sélection) :

R1 :
SELECT ID_ACHAT, ID_CLIENT, L_PRODUIT, DERN_DATE_ACHAT, NOMBRE_ACHAT
FROM T_LISTE
GROUP BY ID_ACHAT, ID_CLIENT, L_PRODUIT, DERN_DATE_ACHAT, NOMBRE_ACHAT
ORDER BY ID_CLIENT, NOMBRE_ACHAT DESC, DERN_DATE_ACHAT DESC ;

2e requête (Création) :

R2:
SELECT ID_CLIENT, First(L_PRODUIT) AS FirstOfProduit INTO T_R2
FROM R1
GROUP BY ID_CLIENT;

3e requête (Mise à Jour) :

R3:
UPDATE LISTE INNER JOIN T_R2 ON T_R2.FirstOfPRODUIT = LISTE.L_PRODUIT SET LISTE.PRODUIT_PRINCIPAL = "P";

Pour la requête création de table, j'ai bien compris que j'en créais une :). Simplement, je ne peux pas déterminer quel est le produit principal avant de regrouper tout les produits acheter par un même client, mais également, je ne crée pas plusieurs table par client par produit.

PS : j'ai modifié le code des requête que je vous ai transmis (car mes libellés et l'architecture de ma base sont plus complexes que la version raccourcie que je vous présente ici).
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
Le Pingou Messages postés 12035 Date d'inscription mercredi 11 août 2004 Statut Contributeur Dernière intervention 1 avril 2024 1 425
2 août 2012 à 16:07
Bonjour,
Merci.
Devant m'absenter, Je vais regarder cela plus tard.
Patience.
0
Le Pingou Messages postés 12035 Date d'inscription mercredi 11 août 2004 Statut Contributeur Dernière intervention 1 avril 2024 1 425
3 août 2012 à 22:24
Bonjour,
Désolé, dans votre cas vous ne pouvez pas en une seule requête avec source les 3 autres.
0
JeanPierreKoffe
4 août 2012 à 11:28
OK, merci d'avoir passer du temps dessus en tout cas :p
0