2010-07-07 8 views
0

J'ai une table de produits, avec les champs produit, catégorie et coût, de type varchar, varchar et decimal.regrouper les résultats communs en sql

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.

Je veux montrer tous les produits vendus pendant un mois, disons le mois en cours.

Cependant, je ne veux pas montrer chaque vente individuellement. Je veux ajouter automatiquement tous les produits ensemble et les montrer comme une rangée.

Dans le tableau des ventes, le coût de chaque enregistrement de vente est déjà multiplié par la quantité. Ainsi, par exemple, si 5 bières ont été achetées, elles seraient retournées en une seule ligne indiquant le nom de bières, en quantité égale à 5, et coûteraient cependant beaucoup.

je besoin de quelque chose comme par exemple:

Select product, cost from sales, WHERE sales.product=products.name 
AND category='food' AND WHERE month(date_field) = month(getdate()) 

Cela devrait montrer toutes les ventes pour une certaine catégorie de produit pour le mois en cours, mais est-il un moyen facile aux produits « groupe » ensemble?

je dois tenir compte de la zone de quantité dans la table de vente, parce qu'une vente n'est pas nécessairement un seul produit

Un exemple nous l'espérons plus claire, une vente disque peut-être pour 2 bières pour un client avec un coût de 10, et un autre record de ventes peut être à un client différent avec une quantité de 3 et le coût de 15. Je veux juste un disque qui dirait pour la bière, 5 ont été vendus et le coût total est 25.

J'ai Je ne sais pas où aller à partir de ce que j'ai obtenu ...

+0

Le problème peut être plus profond que la requête pour sélectionner les ventes de produits. Il se peut que votre structure de table puisse être améliorée. S'il vous plaît pouvez-vous modifier votre question, et ajouter la sortie de 'CREATE TABLE', pour chacune de vos tables.Vous mentionnez une table 'achats', mais cela n'apparaît pas dans votre requête - comment cela se rapporte-t-il aux deux autres tables? – Mike

+0

J'ai décrit la structure de la table au début de ma question cependant? J'ai supprimé la table des achats de ma question, car elle n'est pas pertinente. - J'essaie simplement d'éviter que la question soit inutilement longue. –

+0

A partir des descriptions de vos tables et des exemples de requête, il semble que vous ayez lié les tables via la colonne VARCHAR 'product'. Si vous changez le nom d'un 'product' dans la table' products', la relation se rompra à moins que vous ne mettiez ensuite à jour le 'product_name' dans la table' sales'. Vous * avez * peut-être effectivement rejoint les tables en utilisant une clé primaire à la place, mais ce n'est pas clair à partir de votre question. Mon point était que avec un peu plus d'informations, vous aideriez les répondants à fournir une meilleure solution. – Mike

Répondre

0

Cette question semble terriblement familier ...

La réponse est une instruction SQL GROUP BY. La somme (SUM) ci-dessus correspondra à toutes les unités vendues d'un produit particulier au cours du mois donné.

+0

Je ne pense pas avoir déjà posé une question similaire, mon autre question concernait les plages de dates? –

+0

dans votre solution, le coût n'est pas retourné du tout? Est-il possible de retourner le coût en fonction de la quantité? –

+0

Juste en notant que je viens de sortir une question de vous à propos de l'étape précédente. Aucun mal prévu. – Borealid

0
SELECT productname, cost, COUNT(*) AS cnt 
FROM sales LEFT JOIN products ON sales.product = products.productname 
WHERE category='food' AND month(date_field) = month(getdate()) 
GROUP BY productname 
1

Vous cherchez quelque chose comme

Select product, cost from sales,products WHERE sales.product=products.name 
AND category='food' AND month(date_field) = month(getdate()) 

Pour obtenir une liste des éléments liés comme vous le suggérez selon la catégorie dans les tableaux produits.

Pour obtenir le résumé par catégorie que vous avez besoin de quelque chose comme:

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

Cela fonctionne, mais il y a beaucoup à critiquer dans la structure de votre base de données, en particulier pour lier des produits par nom vous est pas très fiable .

+0

Hi Elemental, même en essayant la solution ci-dessus, je ne peux pas le faire fonctionner. Je reçois principalement l'erreur que le coût du champ est ambigu, et que FUNCTION mytable.getdate n'existe pas. J'ai corrigé l'ambiguïté, je pense, mais je n'ai pas pu dépasser l'erreur de fonction. –

+0

En effet - cependant, il existe des fonctions utiles mysql qui vous servent dans la position du mois et getdate dans votre exemple. Je vous suggère de consulter les docs des fonctions scalaires concernant les dates. – Elemental

+0

J'ai eu getdate travail avant, il semble juste être dans la requête que vous avez posté. Je ne peux pas non plus passer l'erreur d'ambiguïté, devrais-je utiliser sales.cost de sales AND products.cost de produits au lieu de juste le coût des ventes, des produits? –

Questions connexes