Aide pour créer requêtes ACCESS
Résolu
jabest
Messages postés
37
Date d'inscription
Statut
Membre
Dernière intervention
-
Annesophie -
Annesophie -
Bonjour à tous ,
J'ai créé une BD Access avec 2 tables :
TABLE1 : ENTREE
N° DATE REF-E PRODUIT QTE-E
TABLE2 : SORTIE
N° DATE REF-S PRODUIT QTE-S
Ces 2 table sont liées par une relation 1 ENTREE....+sieurs SORTIE
Je souhaiterais par une requête obtenir pour chaque produits les soldes de stock à la date du jour :
DATE PRODUIT STOCK
ce jour A = somme des QTE-E- somme des QTE-S
B
C
et par une autre requête obtenir la récap des derniers mouvements entrées ou sortie pour chaque produits :
DATE PRODUIT REF-E REF-S QTE
y A x 10
s B e 5
s C h 20
Merci d'avance pour votre aide pour info je suis pas à mes aises en SQL, VBA et manipulation demacros.
J'ai créé une BD Access avec 2 tables :
TABLE1 : ENTREE
N° DATE REF-E PRODUIT QTE-E
TABLE2 : SORTIE
N° DATE REF-S PRODUIT QTE-S
Ces 2 table sont liées par une relation 1 ENTREE....+sieurs SORTIE
Je souhaiterais par une requête obtenir pour chaque produits les soldes de stock à la date du jour :
DATE PRODUIT STOCK
ce jour A = somme des QTE-E- somme des QTE-S
B
C
et par une autre requête obtenir la récap des derniers mouvements entrées ou sortie pour chaque produits :
DATE PRODUIT REF-E REF-S QTE
y A x 10
s B e 5
s C h 20
Merci d'avance pour votre aide pour info je suis pas à mes aises en SQL, VBA et manipulation demacros.
A voir également:
- Aide pour créer requêtes ACCESS
- Créer un lien pour partager des photos - Guide
- Comment créer un groupe whatsapp - Guide
- Créer un compte google - Guide
- Créer un compte gmail - Guide
- Créer un compte instagram sur google - Guide
7 réponses
Bonjour Jacques,
Vous êtes proche de la solution , seulement vous sommez les QTE_E ce qui fausse le calcul du STOCKR , en réalité il faudrait faire QTE_E-somme(QTE_S) j'ai tripatouillé l'expression sum de votre requête dans tous les sens mais à chaque fois il me renvoit une erreur d'agrégat ?? je suis suspendu à votre solution.
Trés cdlmt
Vous êtes proche de la solution , seulement vous sommez les QTE_E ce qui fausse le calcul du STOCKR , en réalité il faudrait faire QTE_E-somme(QTE_S) j'ai tripatouillé l'expression sum de votre requête dans tous les sens mais à chaque fois il me renvoit une erreur d'agrégat ?? je suis suspendu à votre solution.
Trés cdlmt
Bonjour,
Voici de quoi faire avancer, je crois, le schmilblick en SQL :
Il me semble que cela correspond à votre besoin (en l'adaptant à votre contexte). Attention, j'ai relu soigneusement, mais .....
SELECT ENTREES.[Code produit], ENTREES.[Nom du Matériel], SORTIES.[Nb sorties] , ENTREES.[Nb entrees] , [entrees].[nb entrees]-[sorties].[nb sorties] AS situation, ENTREES.DateTransaction
FROM ENTREES INNER JOIN SORTIES ON ENTREES.[code produit] = SORTIES.[code produit]
GROUP BY ENTREES.[code produit], ENTREES.[Nom du produit], SORTIES.[nb sorties], ENTREES.[nb entrees], [entrees].[nb entrees]-[sorties].[nb sorties], ENTREES.DateTransaction
HAVING (((ENTREES.DateTransaction)=Date()));
Cordialement
La science ne fait que trouver ce qui existe depuis toujours.
Hubert REEVES.
Voici de quoi faire avancer, je crois, le schmilblick en SQL :
Il me semble que cela correspond à votre besoin (en l'adaptant à votre contexte). Attention, j'ai relu soigneusement, mais .....
SELECT ENTREES.[Code produit], ENTREES.[Nom du Matériel], SORTIES.[Nb sorties] , ENTREES.[Nb entrees] , [entrees].[nb entrees]-[sorties].[nb sorties] AS situation, ENTREES.DateTransaction
FROM ENTREES INNER JOIN SORTIES ON ENTREES.[code produit] = SORTIES.[code produit]
GROUP BY ENTREES.[code produit], ENTREES.[Nom du produit], SORTIES.[nb sorties], ENTREES.[nb entrees], [entrees].[nb entrees]-[sorties].[nb sorties], ENTREES.DateTransaction
HAVING (((ENTREES.DateTransaction)=Date()));
Cordialement
La science ne fait que trouver ce qui existe depuis toujours.
Hubert REEVES.
Merci Jacques , pouvez-vous apporter plus d'explication à un pur néophyte je suis perdu dans voitre procédure.
Je reprends ci dessous mes tables en espérant être plus clair :
- ENTREE (N°,DATE,REF-E,PRODUIT,QTE-E)
- SORTIE (N°,DATE,REF-S,PRODUIT,QTE-S)
Mon but c'est d'avoir une requête qui me donne pour chaque PRODUIT le STOCK=QTE-E - QTE-S
Je reprends ci dessous mes tables en espérant être plus clair :
- ENTREE (N°,DATE,REF-E,PRODUIT,QTE-E)
- SORTIE (N°,DATE,REF-S,PRODUIT,QTE-S)
Mon but c'est d'avoir une requête qui me donne pour chaque PRODUIT le STOCK=QTE-E - QTE-S
Bonjour,
A propos : Dans les noms le '-' est proscrit. Utiliser '_'.
Nota : voilà la requête à copier dans : Requête/nouveau/mode création/(fermer ajouter table)/ activer affichage/SQL mode SQL
SELECT ENTREE.N°, ENTREE.PRODUIT, ENTREE.QTE_E, SORTIE.QTE_S, [entree].[QTE_E]-[sortie].[QTE_S] AS STOCK, ENTREE.Date
FROM ENTREE INNER JOIN SORTIE ON ENTREE.N° = SORTIE.N°
GROUP BY ENTREE.N°, ENTREE.PRODUIT, ENTREE.QTE_E, SORTIE.QTE_S, [entree].[QTE_E]-[sortie].[QTE_S], ENTREE.Date
HAVING (((ENTREE.Date)=Date()));
Attention : Seuls les enregistrements dont la date est 04/11/2006 seront listés
Cordialement
La science ne fait que trouver ce qui existe depuis toujours.
Hubert REEVES.
A propos : Dans les noms le '-' est proscrit. Utiliser '_'.
Nota : voilà la requête à copier dans : Requête/nouveau/mode création/(fermer ajouter table)/ activer affichage/SQL mode SQL
SELECT ENTREE.N°, ENTREE.PRODUIT, ENTREE.QTE_E, SORTIE.QTE_S, [entree].[QTE_E]-[sortie].[QTE_S] AS STOCK, ENTREE.Date
FROM ENTREE INNER JOIN SORTIE ON ENTREE.N° = SORTIE.N°
GROUP BY ENTREE.N°, ENTREE.PRODUIT, ENTREE.QTE_E, SORTIE.QTE_S, [entree].[QTE_E]-[sortie].[QTE_S], ENTREE.Date
HAVING (((ENTREE.Date)=Date()));
Attention : Seuls les enregistrements dont la date est 04/11/2006 seront listés
Cordialement
La science ne fait que trouver ce qui existe depuis toujours.
Hubert REEVES.
Vous n’avez pas trouvé la réponse que vous recherchez ?
Posez votre question
Bonjour,
Un dernier conseil : dans la table Entree, renommer le champ 'Date' en 'Date_Entree' car l'ambiguïté avec la "Date" système peut faire planter les requêtes. En fait Date est un mot dit 'réservé". Donc à proscrire systématiquement.
Pour conclure, voici une requête qui vous sera sans doute utile. Elle permet de lister les transactions d'une semaine en saisissant son N°. Nota : l'année (2006) est en dur dans la syntaxe. Il fauda peut-être l'adapter, au cas par cas, à votre besoin.
SELECT ENTREE.N°, ENTREE.PRODUIT, ENTREE.QTE_E, SORTIE.QTE_S, [entree].[QTE_E]-[sortie].[QTE_S] AS STOCK, DatePart("ww",[Date_entree]) AS Date_controle, ENTREE.Date_entree
FROM ENTREE INNER JOIN SORTIE ON ENTREE.N° = SORTIE.N°
GROUP BY ENTREE.N°, ENTREE.PRODUIT, ENTREE.QTE_E, SORTIE.QTE_S, [entree].[QTE_E]-[sortie].[QTE_S], DatePart("ww",[Date_entree]), ENTREE.Date_entree
HAVING (((DatePart("ww",[Date_entree])) Like [ Semaine ?]) AND ((DatePart("yyyy",[Date_entree]))=2006))
ORDER BY DatePart("ww",[Date_entree]);
Bienvenue dans le monde SQL
Cordialement
La science ne fait que trouver ce qui existe depuis toujours.
Hubert REEVES.
Un dernier conseil : dans la table Entree, renommer le champ 'Date' en 'Date_Entree' car l'ambiguïté avec la "Date" système peut faire planter les requêtes. En fait Date est un mot dit 'réservé". Donc à proscrire systématiquement.
Pour conclure, voici une requête qui vous sera sans doute utile. Elle permet de lister les transactions d'une semaine en saisissant son N°. Nota : l'année (2006) est en dur dans la syntaxe. Il fauda peut-être l'adapter, au cas par cas, à votre besoin.
SELECT ENTREE.N°, ENTREE.PRODUIT, ENTREE.QTE_E, SORTIE.QTE_S, [entree].[QTE_E]-[sortie].[QTE_S] AS STOCK, DatePart("ww",[Date_entree]) AS Date_controle, ENTREE.Date_entree
FROM ENTREE INNER JOIN SORTIE ON ENTREE.N° = SORTIE.N°
GROUP BY ENTREE.N°, ENTREE.PRODUIT, ENTREE.QTE_E, SORTIE.QTE_S, [entree].[QTE_E]-[sortie].[QTE_S], DatePart("ww",[Date_entree]), ENTREE.Date_entree
HAVING (((DatePart("ww",[Date_entree])) Like [ Semaine ?]) AND ((DatePart("yyyy",[Date_entree]))=2006))
ORDER BY DatePart("ww",[Date_entree]);
Bienvenue dans le monde SQL
Cordialement
La science ne fait que trouver ce qui existe depuis toujours.
Hubert REEVES.
Bonjour,
Dans le premier cas il faut ajouter une paire de parenthèses. A l'intérieur de cette parenthèse insérer "<>0". Les stock différents de zéro sont strictement affichés.
Exemple :
SELECT ENTREE.N°, ENTREE.PRODUIT, ENTREE.QTE_E, SORTIE.QTE_S, [entree].[QTE_E]-[sortie].[QTE_S] AS STOCK, DatePart("ww",[Date_entree]) AS Date_controle, ENTREE.Date_entree
FROM ENTREE INNER JOIN SORTIE ON ENTREE.N° = SORTIE.N°
GROUP BY ENTREE.N°, ENTREE.PRODUIT, ENTREE.QTE_E, SORTIE.QTE_S, [entree].[QTE_E]-[sortie].[QTE_S], DatePart("ww",[Date_entree]), ENTREE.Date_entree
HAVING ((([entree].[QTE_E]-[sortie].[QTE_S])<>0) AND ((ENTREE.Date_entree)=Date()))
ORDER BY DatePart("ww",[Date_entree]);
Deuxième cas : Liste des produits "non sortis". Autrement dit : ceux dont la dernière date de sortie est antérieure à la date en cours et dont le champ sortie est à zéro.
SELECT ENTREE.N°, ENTREE.PRODUIT, ENTREE.QTE_E, SORTIE.QTE_S, [entree].[QTE_E]-[sortie].[QTE_S] AS STOCK, SORTIE.Date_sortie, ENTREE.Date_entree
FROM ENTREE INNER JOIN SORTIE ON ENTREE.N° = SORTIE.N°
GROUP BY ENTREE.N°, ENTREE.PRODUIT, ENTREE.QTE_E, SORTIE.QTE_S, [entree].[QTE_E]-[sortie].[QTE_S], SORTIE.Date_sortie, ENTREE.Date_entree
HAVING (((SORTIE.QTE_S)=0) AND ((SORTIE.Date_sortie)<[entree].[Date_entree]))
ORDER BY ENTREE.PRODUIT;
Bon courage
La science ne fait que trouver ce qui existe depuis toujours.
Hubert REEVES.
Dans le premier cas il faut ajouter une paire de parenthèses. A l'intérieur de cette parenthèse insérer "<>0". Les stock différents de zéro sont strictement affichés.
Exemple :
SELECT ENTREE.N°, ENTREE.PRODUIT, ENTREE.QTE_E, SORTIE.QTE_S, [entree].[QTE_E]-[sortie].[QTE_S] AS STOCK, DatePart("ww",[Date_entree]) AS Date_controle, ENTREE.Date_entree
FROM ENTREE INNER JOIN SORTIE ON ENTREE.N° = SORTIE.N°
GROUP BY ENTREE.N°, ENTREE.PRODUIT, ENTREE.QTE_E, SORTIE.QTE_S, [entree].[QTE_E]-[sortie].[QTE_S], DatePart("ww",[Date_entree]), ENTREE.Date_entree
HAVING ((([entree].[QTE_E]-[sortie].[QTE_S])<>0) AND ((ENTREE.Date_entree)=Date()))
ORDER BY DatePart("ww",[Date_entree]);
Deuxième cas : Liste des produits "non sortis". Autrement dit : ceux dont la dernière date de sortie est antérieure à la date en cours et dont le champ sortie est à zéro.
SELECT ENTREE.N°, ENTREE.PRODUIT, ENTREE.QTE_E, SORTIE.QTE_S, [entree].[QTE_E]-[sortie].[QTE_S] AS STOCK, SORTIE.Date_sortie, ENTREE.Date_entree
FROM ENTREE INNER JOIN SORTIE ON ENTREE.N° = SORTIE.N°
GROUP BY ENTREE.N°, ENTREE.PRODUIT, ENTREE.QTE_E, SORTIE.QTE_S, [entree].[QTE_E]-[sortie].[QTE_S], SORTIE.Date_sortie, ENTREE.Date_entree
HAVING (((SORTIE.QTE_S)=0) AND ((SORTIE.Date_sortie)<[entree].[Date_entree]))
ORDER BY ENTREE.PRODUIT;
Bon courage
La science ne fait que trouver ce qui existe depuis toujours.
Hubert REEVES.
Bonne soirée,
Dans un premier temps je vous propose une mine d'astuces. Il s'agit des BDD modèles fournies avec ACCESS 2000.
L'un des modèles s'intitule 'Gestion des stocks'. A l'évidence vous y trouverez des éléments utiles à votre projet ....
Pour atteindre ces modèles, procéder comme suit :
Fichier/Nouvelle base de données/onglet : Base de données/Gestion des stocks, etc .... (suivre les indications fournies)
Bonne découverte et contactez moi si nécessaire
La science ne fait que trouver ce qui existe depuis toujours.
Hubert REEVES.
Dans un premier temps je vous propose une mine d'astuces. Il s'agit des BDD modèles fournies avec ACCESS 2000.
L'un des modèles s'intitule 'Gestion des stocks'. A l'évidence vous y trouverez des éléments utiles à votre projet ....
Pour atteindre ces modèles, procéder comme suit :
Fichier/Nouvelle base de données/onglet : Base de données/Gestion des stocks, etc .... (suivre les indications fournies)
Bonne découverte et contactez moi si nécessaire
La science ne fait que trouver ce qui existe depuis toujours.
Hubert REEVES.
Pour mémoire Agrégat, appelé aussi regroupement permet de masquer les informations redondantes :
Ex. Avant regroupement : Produit Qté
Bière 1
Bière 2
Après Regroupement : Produit Qté
Bière 3
_____________
Autre chose à noter : Date_DE -> Date de la dernière Entrée
Date_DS -> Date de la dernière Sortie
___________
Voici la dernière mouture
SELECT ENTREE.N°, ENTREE.PRODUIT, ENTREE.QTE_E, SORTIE.QTE_S, ([entree].[QTE_E]-Sum([sortie].[QTE_S])) AS STOCKR, Last(SORTIE.Date_sortie) AS Date_DS, Last(ENTREE.Date_entree) AS Date_DE
FROM ENTREE INNER JOIN SORTIE ON ENTREE.N° = SORTIE.N°
GROUP BY ENTREE.N°, ENTREE.PRODUIT, ENTREE.QTE_E, SORTIE.QTE_S
ORDER BY ENTREE.PRODUIT;
A+
La science ne fait que trouver ce qui existe depuis toujours.
Hubert REEVES.
à force de triturer dans tes code ci-dessous ce qui me donne le résultat escompter, j'ai simplement remplacer un sum (QTE_E) par un min.
SELECT ENTREE.N°, Sum(ENTREE.QTE_E) AS SommeDeQTE_E, Sum(SORTIE.QTE_S) AS SommeDeQTE_S, (min(ENTREE.QTE_E)-sum(SORTIE.QTE_S)) AS STOCKR, ENTREE.DATE_E
FROM ENTREE INNER JOIN SORTIE ON ENTREE.N°=SORTIE.N°
GROUP BY ENTREE.N°, ENTREE.DATE_E
ORDER BY ENTREE.N°;
Merci pour toute votre patience et votre disponibilité
A+
Vous commencez à rentrer dans le match, comme disent les footeux. C'est en forgeant, etc...
Pour conclure voici un site de référence parmi d'autres : https://access.developpez.com/
Je suis satisfait d'avoir pu contribuer utilement à votre projet
Au plaisir
La science ne fait que trouver ce qi existe depuis toujours.
Hubert REEVES
Je ne sais plus trop comment vous remercier .
Votre site de référence m'a permis encore d'améliorer ma requête en effet en remplaçant :
FROM ENTREE INNER JOIN SORTIE ON ENTREE.N°=SORTIE.N°
Par :
FROM ENTREE LEFT JOIN SORTIE ON ENTREE.N°=SORTIE.N°
La requête affiche également les entrées pour lesquels il n'exite pas encore de sortie.
C'est totale satisfaction pour moi.
Merci encore et à bientôt sur le forum ccm.