Sélectionner 2 fois le meme champ mais avec 2 conditions différentes

cispo Messages postés 103 Date d'inscription mardi 9 novembre 2004 Statut Membre Dernière intervention 10 septembre 2007 - 30 janv. 2006 à 15:43
Zlub Messages postés 809 Date d'inscription mercredi 11 octobre 2000 Statut Membre Dernière intervention 29 septembre 2010 - 6 févr. 2006 à 03:51
Bonjour,

Comme je l'ai mis dans le titre, je cherche à effectuer une requete qui sélectionne 2 fois le meme champs mais avec 2 conditions différentes.

Par exemple, si j'achète un produit à une date D1 et à un prix P1, et que je le revend à une autre date D2 et à un autre prix P2, quelle est la marge dégagée ?

Cela est-il possible ?

Merci d'avance,

2 réponses

nhervagault Messages postés 6063 Date d'inscription dimanche 13 avril 2003 Statut Membre Dernière intervention 15 juillet 2011 37
31 janv. 2006 à 20:15
Salut

Une piste pour cela il faut faire une jointure de la table sur elle même

exemple

select *, sum(a.prix) - sum(b.prix) as marges
from commande a, commande b
where
a.cle <> b.cle
and
a.produit = b.produit
order by a.dateachat

--peut etre un group by est nécessaire
mais en gros voila l'idée.

elle doit fonctionner.
0
Zlub Messages postés 809 Date d'inscription mercredi 11 octobre 2000 Statut Membre Dernière intervention 29 septembre 2010 8
6 févr. 2006 à 03:51
Salut cispo,

comme l'indique nhervagault, c'est faisable par requete.

Il nous manque le nom et la stuctures de tes tables. Donc, je vais supposer que tu stock tes achats dans acheté et se que tu vends dans vendu.

Selon se que tu veux obtenir, tu auras peut-être besoin de la quantitée.

Donc la requete serait

SELECT (vendu.prix - acheté.prix) * vendu.qté AS Marge
FROM acheté, vendu
WHERE acheté.NumProduit = vendu.NumProduit
AND vendu.NumProduit = xx ;

nb xx = l'identifiant de ton article

si tu stock tout dans une meme table : commande (buerk)

SELECT acheté.NumProduit,
(SUM(vendu.prix) - SUM(acheté.prix)) * vendu.qté AS Marge
FROM Commande AS acheté, Commande AS vendu

WHERE acheté.NumProduit = vendu.NumProduit
AND acheté.Clé <> vendu.Clé
GROUP BY acheté.NumProduit;

si tu emploies SUM(), il faudra en fin de requete mettre un group by(xx)
où xx, represente tout les autres champs que tu selectionnes (donc present dans ton select) à l'exception de ceux qui sont pris dans les parentheses du SUM() ou intervenant dans un calcul avec une fonction SQL : SUM(),AVG(),MIN(),MAX() ...

Pour faire simple, tous les entêtes de colones doivent être dans le GROUP BY sauf ceux qui sont définis par un SUM()

++

Zlub
0
Rejoignez-nous