因此,在这个数据库中,员工进行销售,每个员工都有一名经理。
我试图找出如何通过经理计算销售总额。
我发现了如何获得每位员工的销售,但我不确定如何通过经理获得销售。
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子句只列出经理?
答案 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)
我认为您可以从现有查询开始,SELECT
和GROUP 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;