我有以下的数据库架构(重图像),时间总结
而且我想编写一个查询该查询返回的结果是这样的...... (列标题) :PRODUCT_GROUP - PRODUCT_NAME - Week1 - Week2 - 译员更加的 - Week4 - QTY_Order
Week1是当前的日期和前7天之间的特定产品的所有销售。 Week2都是特定商品销售从2个星期前的(这样的currentdate -7days及的currentdate之间 - 14日)
译员更加从3个星期前...等的特定产品的所有销售;
QTY_Order是第一周,第二周,第三周的特定产品销售的平均值&第4周。
以下SQL将生成:Product_Group - Product_Name - Week1 - QTY_Order(但quantity_order不正确)。
SELECT Product.ProductGroupId, Product.Name, SUM(SaleLine.Quantity) AS Week1, SUM(SaleLine.Quantity) AS OrderQty
FROM Sale
JOIN SaleLine ON Sale.ID = SaleLine.SaleId
JOIN Product ON SaleLine.ProductId = Product.Id
WHERE Sale.SaleDateTime > (CURDATE() - INTERVAL 7 DAY)
GROUP BY Product.ProductGroupId, Product.Name;
我也尝试了以下SQL来获得:PRODUCT_NAME - Week1 - Week2 - QTY_Order(再次,qty_order是不正确的),但week2返回所有空的。
SELECT Product.ProductGroupId, Product.Name, SUM(SaleLine.Quantity) AS Week1, (SELECT SUM(SaleLine.Quantity)
FROM SaleLine
JOIN Sale ON SaleLine.SaleID = Sale.ID
JOIN Product on SaleLine.ProductId = Product.Id
WHERE Sale.SaleDateTime BETWEEN (CURDATE() - INTERVAL 14 DAY) AND (CURDATE() - INTERVAL 7 DAY)) AS Week2, SUM(SaleLine.Quantity) AS QTY_TO_ORDER
FROM Sale
JOIN SaleLine ON Sale.ID = SaleLine.SaleId
JOIN Product ON SaleLine.ProductId = Product.Id
WHERE Sale.SaleDateTime > (CURDATE() - INTERVAL 7 DAY)
GROUP BY Product.ProductGroupId, Product.Name;
任何人都可以指出即将出现错误的第2周(即其返回空)。
任何人都可以想到任何更简单/更清洁的方式来编码?
任何人都可以提供一些指针来计算QTY_Order吗?
预先感谢任何帮助的人能提供:-)
**编辑 - 通过请求添加(customer表中不包括):
的CREATE TABLE语句(也有作为约束各种触发不包括)
CREATE TABLE ProductGroup( Id int PRIMARY KEY AUTO_INCREMENT, Name varchar(50) NOT NULL );
CREATE TABLE Product( Id int PRIMARY KEY AUTO_INCREMENT, ProductGroupId int, Name varchar(100) NOT NULL, Price decimal(8,2), QuantityOnHand int NOT NULL, QuantitySold int NOT NULL, QuantityToOrder int NOT NULL, QuantityRequested int NOT NULL, CONSTRAINT FK_Product_ProductGroup FOREIGN KEY (ProductGroupId) REFERENCES ProductGroup(Id) );
CREATE TABLE Sale( Id int PRIMARY KEY AUTO_INCREMENT, CustomerId int, SaleDateTime datetime NOT NULL, CONSTRAINT Sale_Customer FOREIGN KEY (CustomerId) REFERENCES Customer(Id) );
CREATE TABLE SaleLine( Id int PRIMARY KEY AUTO_INCREMENT, ProductId int NOT NULL, SaleId int NOT NULL, Quantity int NOT NULL, CONSTRAINT FK_SaleLine_Product FOREIGN KEY (ProductId) REFERENCES Product(Id), CONSTRAINT FK_SaleLine_Sale FOREIGN KEY (SaleId) REFERENCES Sale(Id) );
虽然你的图表看起来很漂亮,但有几个show创建table语句,并且几行样例数据会更有用 – e4c5
这被称为数据透视表。看看[MySQL数据透视表](http://stackoverflow.com/questions/7674786/mysql-pivot-table)的例子。你将不得不用'sum'来代替'count'。对于您的订单数量,您需要一个'max(SaleLine.Quantity)AS OrderQty',因为您只需要一次。 – Solarflare