Aide pour créer requêtes ACCESS
Résolu
jabest
Messages postés
37
Statut
Membre
-
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.
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-
Bonsoir jabest,
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.- Bonsoir Jacques
à 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+ - Bonsoir jabest,
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 - Bonjour Jacques ,
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.
-
-
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. -
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 -
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. -
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.-
-
-
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. -
-
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.
-
-
Bonjour
J ai une Base Access de 50 000 enregistrement
j avais commencer a utiliser Access pour faire des rapports
mais je suis coincee a plusieurs deux niveaux :
-Comment intervenir sur la casse?
-Comment ne pas faire apparaitre des champs vident?
Merci pour votre aide !