Réaliser une requête à partir de deux autres requêtes

Fermé
chrys - 6 avril 2011 à 22:42
 chrys - 11 avril 2011 à 21:48
Bonjour,
Je voudrais réaliser une requête à partir de deux autres requêtes préalablement créées; le but étant de trouver le stock final grâce aux quantités d'achat (Requete1) et aux quantités de vente (Requete2)

Ma requête 1 : SELECT Sum(Achats.quantitésA) AS [quantités achetées par produit], Produits.NomP
FROM Produits, Achats
WHERE (((Produits.CodeP)=[Achats].[CodeP]))
GROUP BY Produits.NomP;

Ma requête 2 : SELECT Sum(Ventes.QuantitésV) AS [quantités vendues par produit], Produits.NomP
FROM Produits, Ventes
WHERE (((Produits.CodeP)=[Ventes].[CodeP]))
GROUP BY Produits.NomP;

En gros je voudrais faire une soustraction : Requête 1 - Requête 2 . Mais quelles sont les normes sous Access, en langage SQL pour cela??

En vous remerciant d'avance de votre aide ...



4 réponses

creadiff Messages postés 445 Date d'inscription samedi 3 avril 2010 Statut Membre Dernière intervention 3 novembre 2011 57
Modifié par creadiff le 8/04/2011 à 01:49
Pardon, j'ai omis un détail (il était un peu tard ;-), la requête correcte est :

SELECT 
P.NomP, 
(( SELECT SUM(A.quantitésA) FROM Achats AS A WHERE A.CodeP=P.CodeP ) 
- 
(  SELECT SUM(V.QuantitésV) FROM Ventes AS V WHERE V.CodeP=P.CodeP )) 
AS StockP 

FROM Produits AS P
1
creadiff Messages postés 445 Date d'inscription samedi 3 avril 2010 Statut Membre Dernière intervention 3 novembre 2011 57
7 avril 2011 à 00:27
Ceci devrait fonctionner :

SELECT
P.NomP,
(( SELECT COUNT(*) FROM Achats AS A WHERE A.CodeP=P.CodeP )
-
(  SELECT COUNT(*) FROM Ventes AS V WHERE V.CodeP=P.CodeP ))
AS StockP

FROM Produits AS P
0
Merci pour la rapidité de la réponse. Cependant votre requête proposée ne fonctionne pas, enfin sa mise ne oeuvre fonctionne mais les résultats indiqués ne sont pas bon. =S

J'ai refais mes deux premières requêtes(car il manquait la notion de date) Elles fonctionnent parfaitement, Ce qui me donne :
Requête 1 : SELECT Produits.NomP, Sum(quantitésA) AS [quantités achetés]
FROM Produits, Achats
WHERE Produits.CodeP=Achats.CodeP And dateA<#10/8/2009#
GROUP BY Produits.NomP;

Requête 2 : SELECT Produits.NomP, Sum(quantitésV) AS [quantités vendues]
FROM Ventes, Produits
WHERE Ventes.CodeP=Produits.CodeP And DateV<#10/8/2009#
GROUP BY Produits.NomP;

Suivant ce que je veux faire, n'est ce pas possible de faire quelque chose du genre :
SELECT Produits.NomP
FROM Requête 1, Requête 2
WHERE Requête1-Requête 2
GROUP BY Produits.NomP ??
Ou suis je obligé de répéter les termes des deux requêtes ?

J'ai été sur divers forums et je n'ai rien trouvé :s:s

Merci pour l'aide ... le langage SQL est capricieux !!!!!!
0
Merci beaucoup ça marche !! enfin en remplacant le A du "SELECT SUM(A.QuantitésV)" par un V ^^

D'ailleurs je ne savais pas qu'en mettant juste la première lettre de la Table, la requête pouvait fonctionner !

Encore merci et bonne journée !! ;)
0
c'est un alias il me sembles sinon imagines que tu ai 2 tables qui commencent par la même lettre.
0
creadiff Messages postés 445 Date d'inscription samedi 3 avril 2010 Statut Membre Dernière intervention 3 novembre 2011 57
8 avril 2011 à 01:48
Oui, c'est l'utilité du AS.... valable dans TOUS les langages respectant un minimum la syntaxe SQL.
0
ok ok ;) merci en tout cas !!
0