You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.13 07:40:17