SQL Server中按员工和月份统计销售总额的查询咨询
解决方案
要实现按员工和月份汇总总销售额,我们只需要把各个关联的表串联起来,在你已有的订单总额计算逻辑基础上,进一步按员工姓名和月份(建议加上年份避免跨年月混淆)分组即可。
完整SQL语句(直接关联多表版)
SELECT e.Name AS Employee_Name, od.Month, od.Year, -- 加上年份更严谨,避免不同年份的同月数据混在一起 SUM(oep.Quantity * p.Price) AS Total_Sales_Made_In_That_Month_In_Dollar FROM Employee e INNER JOIN Order_Details od ON e.ID = od.Employee_ID INNER JOIN Order_Each_Product oep ON od.ID = oep.OrderID INNER JOIN Product p ON oep.ProductID = p.ID GROUP BY e.Name, od.Month, od.Year -- 必须和SELECT里的非聚合字段一一对应 ORDER BY e.Name, od.Year, od.Month; -- 可选排序,让结果更清晰易读
逻辑拆解
- 表关联:通过
INNER JOIN把四个表按外键关联,确保员工信息、订单时间、订单内商品、商品价格能完整串联。 - 销售额计算:直接在
SUM()里计算单商品销售额(数量×单价),再汇总所有商品的金额,一步到位。 - 分组规则:按员工姓名、月份、年份分组,这样就能精准得到每个员工在每一年每个月的总销售额。如果业务场景确实不需要区分年份,可以去掉
od.Year的相关部分,但实际工作中建议保留,避免数据混淆。
替代方案(基于你提供的订单总额子查询)
如果你想基于你给出的“计算每个订单总额”的逻辑来扩展,也可以拆分子查询实现,可读性会更强:
SELECT e.Name AS Employee_Name, od.Month, od.Year, SUM(order_total.Total_Order) AS Total_Sales_Made_In_That_Month_In_Dollar FROM Employee e INNER JOIN Order_Details od ON e.ID = od.Employee_ID INNER JOIN ( -- 你提供的订单总额计算逻辑作为子查询 SELECT oep.OrderID, SUM(oep.Quantity * p.Price) AS Total_Order FROM Order_Each_Product oep INNER JOIN Product p ON oep.ProductID = p.ID GROUP BY oep.OrderID ) order_total ON od.ID = order_total.OrderID GROUP BY e.Name, od.Month, od.Year ORDER BY e.Name, od.Year, od.Month;
这个方案先单独算出每个订单的总额,再把订单数据和员工、订单时间关联,最后按员工和月份汇总,逻辑和第一种完全一致,只是拆分了步骤。
内容的提问来源于stack exchange,提问作者SwedishPotato
相关产品推荐
相关产品推荐

