【问题标题】:Total amount of sales in a month SQL Server Management StudioSQL Server Management Studio 一个月的总销售额
【发布时间】:2019-05-18 18:41:18
【问题描述】:

不知道我是否过度规范化但有 4 个表:

  • 员工(ID、姓名)
  • 产品(ID、名称、价格)
  • Order_Details (ID, Employee_ID {FK}, Month, Year) -- 购买时间和销售的员工
  • Order_Each_Product (OrderID {PK, FK}, ProductID {PK, FK}, Quantity) -- 购买了哪些产品以及购买了每种产品的数量

我想要这样的东西:

( Employee_Name, Month, Total_Sales_Made_In_That_Month_In_Dollar )

我认为您可以通过以下方式从 2 个表中获取每个订单的总数:

SELECT SUM((Order_Each_Product.Quantity) * (Product.Price)) 
FROM Order_Each_Product 
INNER JOIN Product ON Order_Each_Product.ProductID = Product.ProductID
GROUP BY OrderID

但是如何再次按 Employee 分组并获得 SUM 的 SUM?

【问题讨论】:

    标签: sql-server


    【解决方案1】:

    Forpas 在我编写代码时击败了我!

    SELECT
        Employee.Name, Year, Month, SUM(Quantity * Price) AS Total_Sales_In_Month
    FROM 
        Order_Details
    
    LEFT JOIN Employee
        ON (Order_Details.Employee_ID = Employee.ID)
    
    LEFT JOIN Order_Each_Product
        ON (Order_Details.ID = Order_Each_Product.OrderID)
    
    LEFT JOIN Product
        ON (Order_Each_Product.ProductID = Product.ID)
    
    GROUP BY
        Employee.ID, Employee.Name, Year, Month
    

    还有一个提示,您当前调用的Order_DetailsOrder_Each_Product 通常分别称为order_headersorder_lines

    【讨论】:

    • 您先生是一份礼物。我发现你的超级初学者友好,而我不熟悉员工 e 的 Forpas……但我的问题已经解决了。还要感谢您的最后提示。
    • @SwedishPotato,谢谢! :) 不要忘记投票并标记已回答。为了解释 Forpas 的代码,他使用了所谓的表别名并省略了可选的AS。完整的你会写FROM Employee AS e,从那时起,它允许你通过名称e来引用Employee表。
    【解决方案2】:

    加入所有表格并按员工的 id、姓名、年份和月份分组:

    select
      e.name,
      od.Year,
      od.Month,
      sum(oep.quantity * p.price) Total_Sales_Made_In_That_Month_In_Dollar
    from employee e 
    inner join order_details od on od.employee_id = e.id
    inner join order_each_product oep on oep.orderid = od.id
    inner join product p on p.id = oep.productid
    group by e.id, e.name, od.Year, od.Month
    

    【讨论】:

    • 非常感谢您的回答。我看到您写的不是 FROM Employee 而是 FROM Employee e。也许最后一个e有一个关键字?无论如何,它非常有帮助。谢谢楼主!
    • eEmployee 表的别名。您还可以使用 AS 关键字找到别名:Employee AS e。
    • @SwedishPotato 我了解您是 SQL 的初学者,因此您需要一个建议:您必须学会使用别名,在大多数情况下,没有它们您将无法编码。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-10-12
    • 2019-07-24
    • 2016-09-01
    • 2022-11-10
    • 2016-03-01
    • 2015-09-16
    相关资源
    最近更新 更多