这是我想要达到的最终结果:
特定日期(例如本月)每个州针对每种产品销售的数量的记录
District State A District State B
Product A 356 934
Product B 343 232
方案
我有以下几点需要明确:
这就是说 下表如下所示:
州表
State_Id
State_Name
产品表
Product_Id
Product_Name
州产品价格表
StateProduct_Id
State_Id - referenced to states table
Product_Id - linked to products table
StateProduct_Price
代理商表
Agent_Id
Agent_Name
State_Id - linked to states table
订单表
Order_Id
Agent_Id
Order_DatePurchased - in the end this date is what will be used to calculate the total quantity of products sold within a certain date
订单行表:
OrderLine_Id
Order_Id - linked to the orders table
Agent_Id - linked to the agents table
Product_Id - linked to the products table not products state table
OrderLine_ProductNameATOP - at time of purchase
OrderLine_QuantitySoldATOP - at time of purchase
订单行表将用于获取将在报告中使用的产品ID引用的特定产品的数量。
我需要一个查询才能生成上面显示的报告。
我该怎么做才能收到此报告?!我希望有人能帮帮忙。我不希望有人为我做这件事,只是解释会很棒
答案 0 :(得分:2)
您需要交叉表报告,这不是在MySQL中生成的最简单的事情。
以下是获取1月份结果集的查询(未经测试):
Select
OrderLines.Product_Id,
States.State_Name,
Sum(OrderLines.OrderLine_QuantitySoldATOP) as Quantity
From ( (
OrderLines
Inner Join Orders on OrderLines.Order_Id = Orders.Order_Id )
Inner Join Agents on OrderLines.Agent_ID = Agents.Agent_ID )
Inner Join States on Agents.State_Id = States.State_Id
Where
Orders.Order_DatePurchased >= '2013-01-01' and
Orders.Order_DatePurchased < '2013-02-01'
Group by
OrderLines.Product_Id,
States.State_Name
现在您需要在交叉表中格式化它。此链接将带您进入一个页面,该页面说明如何利用存储过程将结果集从上面的查询转换为您需要的布局。
http://www.danradigan.com/wordpress/2011/03/pivot-tables-in-mysql/