2013-05-06 62 views
1

enter image description hereSQL獲取管理員總訂單

因此,在此數據庫中,員工進行銷售,每個員工都有一位經理。

我試圖找出如何計算經理的銷售總額。

我發現如何獲得每個員工的銷售額,但我不知道如何獲得經理。

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級深員工的經理,我們可以假設,這將始終是這種情況或會僱員也可以是經理給別人,也報告給經理嗎? – xQbert 2013-05-06 00:51:29

回答

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; 
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; 

這基本上再次加入員工表以獲得經理。

如果我們需要包括具有相同經理 下,員工的銷售沿着經理銷售我們需要使用一個內連接類似如下

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

coalese一組抓住的第一個非空值的變量。在這種情況下,由於managerID字段在作爲管理者的那些記錄上是空的,所以我們替換經理ID的EID,以允許它們的銷售也被彙總。

然而,所有這一切都取決於只有1級深的經理和管理人員的ManagerID爲空。

`

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; 
在這個例子中