SQL获取经理的总订单

时间:2013-05-06 00:42:29

标签: sql ms-access

enter image description here

因此,在这个数据库中,员工进行销售,每个员工都有一名经理。

我试图找出如何通过经理计算销售总额。

我发现了如何获得每位员工的销售,但我不确定如何通过经理获得销售。

SELECT Employee.Name, SUM(OrderItem.Quantity*OrderItem.Saleprice)
FROM (Employee INNER JOIN [Order] ON Employee.EID = Order.EID) INNER JOIN OrderItem ON      
Order.OrderID = OrderItem.OrderID
Group By Employee.Name;

我只需要经理订购吗?或者有一个where子句只列出经理?

3 个答案:

答案 0 :(得分:1)

假设只有1级经理对员工存在...... 它还假设管理人员没有需要添加的销售。

SELECT E2.Name, SUM(OrderItem.Quantity*OrderItem.Saleprice)
FROM Employee 
INNER JOIN [Order] ON Employee.EID = Order.EID
INNER JOIN OrderItem ON Order.OrderID = OrderItem.OrderID
INNER JOIN employee e2 on E2.EID = E2.ManagerID
Group By E2.Name;

这基本上再次加入到employee表中以获取经理。

如果我们需要在同一位经理下包括经理人销售和员工销售 我们需要使用类似如下的内连接

INNER JOIN employee e2 on E2.EID = coalese(E2.ManagerID, E2.EID)

coalese获取一组变量中的第一个非null值。在这种情况下,由于managerID字段在作为经理的那些记录上为空,因此我们将EID替换为经理ID,以允许其销售也被聚合。

然而,所有这一切都取决于只有1级深度w /经理和管理员的ManagerID为空。

`

答案 1 :(得分:1)

我认为您可以从现有查询开始,SELECTGROUP BY ManagerID代替Employee.Name。我也会对表名称进行别名,尤其是Order,因为它是一个保留字。但是你不需要为它们添加别名。

SELECT
    e.ManagerID,
    SUM(oi.Quantity*oi.Saleprice) AS sales
FROM
    (Employee AS e
    INNER JOIN [Order] AS o
    ON e.EID = o.EID)
    INNER JOIN OrderItem AS oi
    ON o.OrderID = oi.OrderID
Group By e.ManagerID;

这应该给你ManagerID的总和。如果您需要管理员的名称,并且这些名称存储在另一个表中,您也可以加入该表。

再次查看表格的屏幕截图,前4个ManagerID值为空。如果这些行中的人员是经理,您可以加入Employees表的第二个副本。

SELECT
    e2.Name,
    SUM(oi.Quantity*oi.Saleprice) AS sales
FROM
    ((Employee AS e
    INNER JOIN [Order] AS o
    ON e.EID = o.EID)
    INNER JOIN OrderItem AS oi
    ON o.OrderID = oi.OrderID)
    INNER JOIN Employee AS e2
    ON e2.EID = e.ManagerID
Group By e2.Name;

答案 2 :(得分:0)

尝试

SELECT m.Name ManagerName, SUM(oi.Quantity * oi.Saleprice) Total
  FROM Employee e INNER JOIN 
       [Order] o ON e.EID = o.EID INNER JOIN 
       OrderItem oi ON o.OrderID = oi.OrderID INNER JOIN
       Employee m ON e.ManagerID = e.EID
 GROUP BY e.ManagerID, m.Name;