Boudchiche
Messages postés59Date d'inscriptionvendredi 8 octobre 2004StatutMembreDernière intervention25 novembre 2006
-
12 mai 2006 à 20:10
Boudchiche
Messages postés59Date d'inscriptionvendredi 8 octobre 2004StatutMembreDernière intervention25 novembre 2006
-
31 mai 2006 à 22:54
Salut j'ai poste mon probleme mais je n'ai pas eu de reponse je vais essaye de le simplifie un peu esperant que quelqu'un me donne une issue
Table1 Table2 Table3
A A A
B B C
C B B
Table1=stock initiale
Table2=Achat
Table3=Ventes
et les lettres A,B,C representent les articles
Parfois j'ai des articles dans le stocks initiale et dans achat et ventes
Parfois j'ai un article dans le stocks initiale mais j'ai pas fait d'achat mais j'ai realise des ventes
Et parfois je ne l'ai pas dans le stock initiale mais je l'ai achete et j'ai fait des ventes.
Je veut afficher les articles et la somme de leur quantite
Donnez moi juste une idee je suis bloque
Merci
nhervagault
Messages postés6063Date d'inscriptiondimanche 13 avril 2003StatutMembreDernière intervention15 juillet 201137 13 mai 2006 à 15:45
Salut
Une petite requete avec des left join doit mettre d'aplomb tes tables.
Le restultat sera
Table1 Table2 Table3
A A A
NULL B B
C NULL C
Voila la requete.
SELECT * from article
INNER JOIN tabl3 t3
ON T3.id_produit = article.id_produit
left join table2 t2
ON t3.id_prod = t2.id_prod
left join table1 t1
ON t1.id_prod = t1.id_prod
Attention l'ordre des tables est important.
J'ai mis un inner join entre article et ventes car selon ton exemple tu veux toutes les ventes.
Ensuite
Il reste à faire les group by produit, les calculs qu'il faut.
Je ne peux pas trop d'aider sur ce point, car il manque la description plus precise des tables.
Pour faire les calculs.
SELECT article.id_produit, article.nom, sum(T3.prix) as prix,sum(T3.quantite) as quantite_vendu as prix from article
INNER JOIN tabl3 t3
ON T3.id_produit = article.id_produit
left join table2 t2
ON t3.id_prod = t2.id_prod
left join table1 t1
ON t1.id_prod = t1.id_prod
GROUP BY article.id_produit, article.nom
ORDER BY article.id_produit
Mais je ne vois pas pourquoi tu fais intervenir le stock.
En esperant t'avoir guider un peu.
Donne-nous la formule de gestion pour t'aider un peu
SELECT article.id_produit, article.nom, sum(T3.prix) as prix,
sum(T2.quantite - T3.quantite + T1.quantite) as quantite from article
INNER JOIN tabl3 t3
ON T3.id_produit = article.id_produit
left join table2 t2
ON t3.id_prod = t2.id_prod
left join table1 t1
ON t1.id_prod = t1.id_prod
GROUP BY article.id_produit, article.nom
ORDER BY article.id_produit
Apres je ne sais pas comment sont tes données.
Et le comportement de SQLSERVER Avec ces dernieres. gestion des null par exemple
Pour le stock initiale la societe qui est concene par ce programme fait un inventaire a la fin de chaque annee s'est ce qui represnte son stock initiale
Le probleme que j'ai trouve est que parfois il arrive qu'un produit existe dans leur stock initial mais il ne l'ont plus achete cette annee et ils ont fait des ventes de ce dernier
et le contraire il arrive qu'on un nouveau produit qui n'existait pas l'an passer la societe l'a achete et vendu.
Pour les relations LEFT JOIN j'ai essaye mais rien alors si peut m'aider un peu la dessus
merci encore une fois nhervagault
Vous n’avez pas trouvé la réponse que vous recherchez ?
Boudchiche
Messages postés59Date d'inscriptionvendredi 8 octobre 2004StatutMembreDernière intervention25 novembre 2006 14 mai 2006 à 04:47
Salut
Voila je te donne ma requete j'ai essaye de lui applique les LEFT JOIN mais je n'ai pas reussit
Dim strsql
As String "SELECT Produit.Nom_Produit,Couleurs.Nom_Couleur,SUM(DetailAchat.Quantite) AS Qte_Achat,SUM(DetailInventaire.Quantite) AS Qte_In,SUM(DetailVente.Quantite) AS Qte_Vente FROM Produits INNER JOIN DetailVente ON Produits.ID_Produit DetailVente.ID_Produit INNER JOIN DetailInventaire ON Produits.ID_Produit = DetailInventaire.ID_Produit INNER JOIN Couleurs ON DetailInventaire.ID_Couleur = Couleurs.ID_Couleur AND DetailVente.ID_Couleur = Couleurs.ID_Couleur INNER JOIN DetailAchat ON Articles.ID_Produit = DetailAchat.ID_Produit AND Couleurs.ID_Couleur = DetailAchat.ID_Couleur
GROUP BY Produit.Nom_Produit,Couleurs.Nom_Couleur"
Boudchiche
Messages postés59Date d'inscriptionvendredi 8 octobre 2004StatutMembreDernière intervention25 novembre 2006 14 mai 2006 à 05:14
je te donne le resultat que j'ai eu mais il ne me donne pas les couleur pour le reste ca marche
Je crois que j'ai loupe quelque chose
Dim strsql As String "SELECT Produit.Nom_Produit,Couleurs.Nom_Couleur,SUM(DetailAchat.Quantite) AS Qte_Achat,SUM(DetailInventaire.Quantite) AS Qte_In,SUM(DetailVente.Quantite) AS Qte_Vente FROM Produits INNER JOIN DetailVente ON Produits.ID_Produit DetailVente.ID_Produit LEFT JOIN DetailInventaire ON Produits.ID_Produit = DetailInventaire.ID_Produit LEFT JOIN Couleurs ON DetailInventaire.ID_Couleur = Couleurs.ID_Couleur AND DetailVente.ID_Couleur = Couleurs.ID_Couleur LEFT JOIN DetailAchat ON Articles.ID_Produit = DetailAchat.ID_Produit AND Couleurs.ID_Couleur = DetailAchat.ID_Couleur
GROUP BY Produit.Nom_Produit,Couleurs.Nom_Couleur"
Boudchiche
Messages postés59Date d'inscriptionvendredi 8 octobre 2004StatutMembreDernière intervention25 novembre 2006 14 mai 2006 à 13:55
Salut
s'est une bonne nouvelle ca marche sauf qu'il me fait un produit cartesien si j'ai deux enregistrement du meme article et couleur il les parcoure deux fois je crois que ca vient de la base de donnee c.a.d si je doit avoir dans la somme 100 il me donne 200 et si il y en a trois il donne 300
Boudchiche
Messages postés59Date d'inscriptionvendredi 8 octobre 2004StatutMembreDernière intervention25 novembre 2006 14 mai 2006 à 17:38
Salut
Pour la base je crois quelle est bien faite mais puisque je fait la selection suivant le produit et la couleur je crois quel fait deux selection une par couleur et une par produit je sais que tu m'as beacoup aider alors je te remerci beaucoup mais si tu as encore un peu de temps...... sinon merci pour tout
nhervagault
Messages postés6063Date d'inscriptiondimanche 13 avril 2003StatutMembreDernière intervention15 juillet 201137 14 mai 2006 à 20:49
Salut,
Le group by devrait les éviter, je ne comprends pas trop d'ou vient le probleme.
Essaie de mettre un distinct, mais je te garantie rien, et je pense que ca vient bien sur du ou, le distinct corrigera les probleme mais les perfs seront bien moins interressantes.
Boudchiche
Messages postés59Date d'inscriptionvendredi 8 octobre 2004StatutMembreDernière intervention25 novembre 2006 16 mai 2006 à 14:27
Salut
J'ai essaye avec DISTINCT mais sans resultat j'ai essaye de passer par la requete d'UNION ca marche mais lorsque le produit existe dans les trois tables elle ne le donne pas sur la meme ligne
Merci pour tout
crilun
Messages postés114Date d'inscriptionlundi 10 mai 2004StatutMembreDernière intervention17 octobre 2006 19 mai 2006 à 15:46
crilun
salut,
j'ai regardé un peu ton pb, normal pour le produit cartesien c'est à cause des multiples jointures,
le mieux c'est de regrouper avant dans une sous requete et d'y faire ta
somme,ainsi tu es sur de ne joindre qu'uen seule ligne par rapport à
ton ID
par contre il y a un truc que je ne comprends pas tres bien au niveau de tes couleurs?
tu fait des jointures avec des ON sur tes tables de Stock,inventaire et
vente pour obtenir ta couleur, mais ta couleur n'es pas specifique à
ton produit? dans ce cas tu devrais avoir l'id_couleur dans ta table
produits...
il y aussi dans ta requete Article.champ, mais Article n'est pas dans la clause FROM,
donc je te propose aun debut de solution masi qui ne marchera pas car
je n'ia pas tout l'ennoncé du pb donc je n'ia pas pu la finir,
precise moi donc comment tu geres les couleurs exactement,et si par
exemple un meme id_produit peut avoir plusieurs couleurs differents
dnas les tables Stock,inventaire et achats je te modifirais la requete
ci dessous pour que ca marche.
tiens moi au courant si tu as reussi a faire ce que tu voulais ++
SELECT
P.Nom_Produit,
C.Nom_Couleur,
DA.Qte_Achat,
DI.Qte_In,
DV.Qte_Vente
FROM
Produits P
LEFT JOIN (SELECT TOP 100 PERCENT
--TOP 100 PERCENT IMPORTANT:il permet de faire un group by sur une requete imbriquée
ID_PRODUIT,
SUM(QUANTITE) AS QTE_ACHAT,
FROM
DetailVente
GROUP BY
ID_PRODUIT
) DV ON P.ID_Produit =
DV.ID_Produit
LEFT JOIN (SELECT TOP 100 PERCENT
ID_PRODUIT,
SUM(QUANTITE) AS QTE_IN,
FROM
DetailInventaire
GROUP BY
ID_PRODUIT
) DI ON P.ID_Produit =
DI.ID_Produit
LEFT JOIN
Couleurs C ON DI.ID_Couleur C.ID_Couleur AND DV.ID_Couleur C.ID_Couleur --la j'ai pas modifié car ej voudrais savoir pour la
gestion des couleurs
LEFT JOIN
DetailAchat DA ON Articles.ID_Produit DA.ID_Produit AND C.ID_Couleur
DA.ID_Couleur--pareil la je sais pas d'ou vient la base article
Boudchiche
Messages postés59Date d'inscriptionvendredi 8 octobre 2004StatutMembreDernière intervention25 novembre 2006 29 mai 2006 à 13:14
salut
je m'excuse de ne pas t'avoir repondu si vite parceque j'ai des problemes avec ma connection et je vient juste de voir ton message.
Pour ce que tu m'as dit tu as totalement raison mais au lieu de d'ajouter un ID_Couleur dans la table Produit j'ai cree une table Article qui a comme champs(ID_Produit,ID_Couleur) et ca marche . Et j'ai fait aussi des sous requette et j'ai reussi a resoudre une partie du probleme maintenat j'arrive a afficher Detail Inventaire ,les achats,les ventes et voici ma requette
SELECT P.Produit,C.Couleur,
(SELECT SUM(Qte) FROM DetailInventaire WHERE ID_Produit=P.ID_Produit AND ID_Couleur=C.IDCouleur) AS QteInvenatire,
(SELECT SUM(Quantite) FROM Achat WHERE ID_Produit=P.ID_Produit AND ID_Couleur=C.IDCouleur) AS QteAchete,
(SELECT SUM(Quantite) FROM Vente WHERE ID_Produit=P.ID_Produit AND ID_Couleur=C.IDCouleur) AS QteVendu
ca marche tres bien mais maintenat je suis bloque dans le faite que j'ai besoin de calculer le Qte stock et sa valeur
stock=QteInventaire+QteAchete-Qtevendu
valeur=valeurInventaire+valeurachat-valeurvendu
Merci pour ta reponse
Boudchiche
Messages postés59Date d'inscriptionvendredi 8 octobre 2004StatutMembreDernière intervention25 novembre 2006 29 mai 2006 à 13:23
j'ai ratte la fin de ma requete voici la suite
FROM Article A INNER JOIN Produit P ON A.ID_Produit=P.ID_Produit INNER JOIN Couleur C ON A.ID_Couleur=C.ID_Couleur
Boudchiche
Messages postés59Date d'inscriptionvendredi 8 octobre 2004StatutMembreDernière intervention25 novembre 2006 29 mai 2006 à 17:30
je m'excuse j'ai mal explique mon probleme pour avoir la quantite du stock
QteStock=SUM(QteInventaire)+SUM(QteAchete)-SUM(Qtevendu)
meme chose pour les valeur
valeurStock=SUM(valeurInventaire)+SUM(ValeurAchete)-SUM(ValeurVendu)
Voila je t'ecrit toute ma requete
SELECT P.Produit,C.Couleur,
(SELECT SUM(Qte) FROM DetailInventaire WHERE ID_Produit=P.ID_Produit AND ID_Couleur=C.IDCouleur) AS QteInvenatire,
(SELECT SUM(Valeur) FROM DetailInventaire WHERE ID_Produit=P.ID_Produit AND ID_Couleur=C.IDCouleur) AS QteInvenatire,
(SELECT SUM(Quantite) FROM Achat WHERE ID_Produit=P.ID_Produit AND ID_Couleur=C.IDCouleur) AS QteAchete,
(SELECT SUM(Valeur) FROM Achat WHERE ID_Produit=P.ID_Produit AND ID_Couleur=C.IDCouleur) AS QteAchete,
(SELECT SUM(Quantite) FROM Vente WHERE ID_Produit=P.ID_Produit AND ID_Couleur=C.IDCouleur) AS QteVendu,
(SELECT SUM(Valeur) FROM Vente WHERE ID_Produit=P.ID_Produit AND ID_Couleur=C.IDCouleur) AS QteVendu
FROM Article A INNER JOIN Produit P ON A.ID_Produit=P.ID_Produit INNER JOIN Couleur C ON A.ID_Couleur=C.ID_Couleur
Merci beaucoup je commencais a croire que je n'arriverais jamais a la fin de ce probleme.
Boudchiche
Messages postés59Date d'inscriptionvendredi 8 octobre 2004StatutMembreDernière intervention25 novembre 2006 29 mai 2006 à 17:30
je m'excuse j'ai mal explique mon probleme pour avoir la quantite du stock
QteStock=SUM(QteInventaire)+SUM(QteAchete)-SUM(Qtevendu)
meme chose pour les valeur
valeurStock=SUM(valeurInventaire)+SUM(ValeurAchete)-SUM(ValeurVendu)
Voila je t'ecrit toute ma requete
SELECT P.Produit,C.Couleur,
(SELECT SUM(Qte) FROM DetailInventaire WHERE ID_Produit=P.ID_Produit AND ID_Couleur=C.IDCouleur) AS QteInvenatire,
(SELECT SUM(Valeur) FROM DetailInventaire WHERE ID_Produit=P.ID_Produit AND ID_Couleur=C.IDCouleur) AS QteInvenatire,
(SELECT SUM(Quantite) FROM Achat WHERE ID_Produit=P.ID_Produit AND ID_Couleur=C.IDCouleur) AS QteAchete,
(SELECT SUM(Valeur) FROM Achat WHERE ID_Produit=P.ID_Produit AND ID_Couleur=C.IDCouleur) AS QteAchete,
(SELECT SUM(Quantite) FROM Vente WHERE ID_Produit=P.ID_Produit AND ID_Couleur=C.IDCouleur) AS QteVendu,
(SELECT SUM(Valeur) FROM Vente WHERE ID_Produit=P.ID_Produit AND ID_Couleur=C.IDCouleur) AS QteVendu
FROM Article A INNER JOIN Produit P ON A.ID_Produit=P.ID_Produit INNER JOIN Couleur C ON A.ID_Couleur=C.ID_Couleur
Merci beaucoup je commencais a croire que je n'arriverais jamais a la fin de ce probleme.
Boudchiche
Messages postés59Date d'inscriptionvendredi 8 octobre 2004StatutMembreDernière intervention25 novembre 2006 29 mai 2006 à 17:35
Tu m'excuse je corrige :
SELECT P.Produit,C.Couleur,
(SELECT SUM(Qte) FROM DetailInventaire WHERE ID_Produit=P.ID_Produit AND ID_Couleur=C.IDCouleur) AS QteInvenatire,
(SELECT SUM(Valeur) FROM DetailInventaire WHERE ID_Produit=P.ID_Produit AND ID_Couleur=C.IDCouleur) AS ValeurInvenatire,
(SELECT SUM(Quantite) FROM Achat WHERE ID_Produit=P.ID_Produit AND ID_Couleur=C.IDCouleur) AS QteAchete,
(SELECT SUM(Valeur) FROM Achat WHERE ID_Produit=P.ID_Produit AND ID_Couleur=C.IDCouleur) AS ValeurAchete,
(SELECT SUM(Quantite) FROM Vente WHERE ID_Produit=P.ID_Produit AND ID_Couleur=C.IDCouleur) AS QteVendu,
(SELECT SUM(Valeur) FROM Vente WHERE ID_Produit=P.ID_Produit AND ID_Couleur=C.IDCouleur) AS ValeurVendu
FROM Article A INNER JOIN Produit P ON A.ID_Produit=P.ID_Produit INNER JOIN Couleur C ON A.ID_Couleur=C.ID_Couleur