1

ここに画像の説明を入力

したがって、このデータベースでは、従業員が売上を上げ、各従業員にはマネージャーがいます。

マネージャーごとの売上合計を計算する方法を理解しようとしています。

各従業員の売上を取得する方法はわかりましたが、マネージャーごとに取得する方法がわかりません。

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 句がありますか?

4

3 に答える 3

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 フィールドは null であるため、マネージャー ID の代わりに EID を代入して、売上も集計できるようにします。

ただし、これもすべて、マネージャーとの 1 レベルの深さであり、ManagerID が null であるマネージャーを持つことに依存します。

`

于 2013-05-06T00:55:59.487 に答える
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;
于 2013-05-06T00:53:01.413 に答える