【发布时间】:2011-03-12 16:49:40
【问题描述】:
我有一个产品表,其中包含字段产品、类别和成本,类型为 varchar、varchar 和小数。
然后我有一个销售表,其中包含字段 client、productname、quantity、cost 和 saledate,类型为 varchar、varchar、int、decimal 和 date。
我想显示一个月内销售的所有产品,比如当月。
但是,我不想单独显示每笔销售。我想自动将所有一种产品添加在一起并显示为一行。
在销售表中,每条销售记录的成本已经乘以数量。
因此,例如,如果购买了 5 杯啤酒,它将返回一行,显示名称为啤酒,数量为 5,价格为多少。
我需要这样说:
Select product, cost from sales, WHERE sales.product=products.name
AND category='food' AND WHERE month(date_field) = month(getdate())
这应该显示当月某个类别产品的所有销售额,但是有没有简单的方法将产品“分组”在一起?
我必须考虑销售表中的数量字段,因为一次销售不一定只有一种产品
一个希望更清楚的例子,一个销售记录可能是一个客户的 2 瓶啤酒,成本为 10,另一个销售记录可能是另一个客户,数量为 3,成本为 15。我只想要一个记录会说啤酒,卖出了 5 个,总成本是 25。
到目前为止,我不知道从哪里开始......
【问题讨论】:
-
问题可能比选择产品销售的查询更深入。可能是您的表结构可以改进。请您编辑您的问题,并为您的每个表格添加来自
CREATE TABLE的输出。您提到了一个purchases表,但它没有出现在您的查询中 - 这与其他两个表有什么关系? -
我在问题开始时描述了表结构?我已从我的问题中删除了购买表,因为它不相关。 - 我只是想防止问题不必要地冗长。
-
从您的表描述和示例查询来看,您似乎已经通过 VARCHAR
product列关联了这些表。如果您更改products表中product的名称,除非您随后更新sales表中的product_name,否则关系将中断。您可能实际上已经使用主键加入了表,但这在您的问题中并不清楚。我的观点是,如果您提供更多信息,您将帮助受访者提供更好的解决方案。