我有一个产品表,其中包含varchar,varchar和decimal类型的产品,类别和成本字段。
然后我有一个销售表,其字段为客户端,产品名称,数量,成本和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。
我不知道从哪里开始......
答案 0 :(得分:1)
您正在寻找类似
的内容Select product, cost from sales,products WHERE sales.product=products.name
AND category='food' AND month(date_field) = month(getdate())
根据产品表中的类别获取您建议链接的项目列表。
要按类别获取摘要,您需要以下内容:
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
这样可行,但在您的数据库结构中有很多批评,特别是按名称链接产品并不是很可靠。
答案 1 :(得分:0)
这个问题看起来非常熟悉......
答案是SQL GROUP BY语句。
SELECT product, SUM(quantity) FROM sales s, products p WHERE product=p.name AND category='food' AND month(date_field)=month(getdate()) GROUP BY product
上面的SUM(数量)将计算出给定月份内特定产品的所有销售单位。
答案 2 :(得分:0)
答案 3 :(得分: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