2010-07-07 10 views
0

J'ai une table de produits, avec les champs produit, catégorie et coût, de type varchar, varchar et decimal.Regroupement des champs par catégorie et classement par date, et calcul à partir d'une autre table

J'ai alors une table des ventes, avec les champs client, nom de produit, quantité, coût, et saledate, de type varchar, varchar, int, décimal et date.

J'ai aussi une table des achats, avec les champs achetés, le coût, la quantité et l'achat, de types date, décimal, varchar et varchar.

Dans ma table des ventes, le champ de coût d'un enregistrement donné est automatiquement multiplié par la quantité.

Par exemple, si les coûts de la bière 10, et un record pour une vente de la quantité de bière est 2, le coût de cet enregistrement sera automatiquement 20.

Ce que je veux faire, est de retour tout le résultat les ventes et les achats sont automatiquement regroupés.

Par exemple, si j'ai les données suivantes dans la table de vente:

productname - quantity - cost- saledate 

beer   2   20 2010-07-10 
beer   3   50 2010-07-11 

And in the purchases table: 

purchasedate - cost - quantity - purchase 
2010-07-09  20  2   straws 

Je veux montrer la sortie suivante

Ventes totales pour le mois en cours:

productname - quantity - cost 

beer   5   50 

total achats pour le mois en cours

purchasedate - cost - quantity - purchase 
2010-07-09  20  2   straws 

je tentais quelque chose comme ce qui suit:

Select category,SUM(Sales.Quantity),SUM(Sales.Quantity*cost) cost from 
sales,products WHERE sales.product=products.name 
AND category='food' AND month(date_field) = month(getdate()) group by category 

Cependant, cela fait tout, et je pense que d'autre part fonctionne pas d'abord il multiplie le champ des coûts dans le tableau des ventes une deuxième fois, ce qui en fait inexact.

Dois-je inclure le coût d'origine de la table des produits afin de faire ce dont j'ai besoin?

Puis-je faire ce que je veux dans une requête, peut-être en tant qu'union, en retournant les lignes et les colonnes respectives selon mon exemple?

Répondre

0

Si je reçois votre droite, cela devrait être

Ventes totales pour le mois en cours:

SELECT s.productname, SUM(s.quantity), SUM(s.cost) 
FROM sales AS s 
LEFT JOIN products AS p ON s.productname = p.name 
WHERE MONTH(s.saledate) = MONTH(NOW()) AND p.category = 'food' 
GROUP BY s.productname 

Mais je ne vois pas la connexion à la table d'achat

+0

qui semble l'être exactement! si simple ... –

+0

Ahh, je pense qu'il doit y avoir une connexion à la table des produits. La table des produits et la table des ventes sont liées via le champ productname (loin d'être idéal, je le sais), et je ne souhaite afficher que certaines ventes pour une catégorie particulière de la table des produits. –

+0

Je viens de modifier la requête ci-dessus. Maintenant, la table des produits est jointe. – JochenJung

Questions connexes