SQL zapytanie - pomoc

0

Witam!
Poddaje się, zostało mi jedno zapytanie z ćwiczeń zadanych do domu, ale niestety chyba sobie z nim samodzielnie nie poradzę.
Mam tabelę pracowników - gdzie dwa pola to EmployeeId oraz ReportsTo (id pracownika, który jest szefem).
Treść zadań:

  1. Dla każdego pracownika (imię i nazwisko) podaj łączną wartość
    zamówień obsłużonych przez tego pracownika
  2. Ogranicz wynik z pkt 1 tylko do pracowników
    a) którzy mają podwładnych
    b) którzy nie mają podwładnych

z 1 oraz 3b sobie poradziłem. Pytanie jak ugryźć 3a.

Podaje zapytania które napisałem:

 

-- 4.1.
SELECT e.firstname, e.lastname, SUM(od.quantity*od.unitprice*(1-od.discount))
FROM employees AS e
INNER JOIN orders AS o
ON e.employeeid = o.employeeid
INNER JOIN [order details] AS od
ON o.orderid = od.orderid
GROUP BY e.firstname, e.lastname
ORDER BY 3 DESC

-- 4.3.a. !!! z tym mam problem
SELECT DISTINCT e.firstname, e.lastname, SUM(od.quantity*od.unitprice*(1-od.discount))
FROM employees AS e
INNER JOIN employees as ee
ON e.employeeid = ee.reportsto
INNER JOIN orders AS o
ON e.employeeid = o.employeeid
INNER JOIN [order details] AS od
ON o.orderid = od.orderid
GROUP BY e.firstname, e.lastname
ORDER BY 3 DESC

-- 4.3.b.
SELECT e.firstname, e.lastname, SUM(od.quantity*od.unitprice*(1-od.discount))
FROM employees AS e
LEFT OUTER JOIN employees AS ee
ON e.employeeid = ee.reportsto
LEFT OUTER JOIN orders AS o
ON e.employeeid = o.employeeid
LEFT OUTER JOIN [order details] AS od
ON o.orderid = od.orderid
WHERE ee.employeeid IS NULL
GROUP BY e.firstname, e.lastname
ORDER BY 3 DESC

0

Tak jak w 3b tylko zamiast:
LEFT OUTER JOIN employees AS ee -> INNER OUTER JOIN employees AS ee

i usun WHERE

0

Niestety dalej nie dostaje oczekiwanych wyników, problem pewnie w tym, że tych dwóch gości ma wielu podwładnych...

SELECT DISTINCT e.firstname, e.lastname, ee.firstname, ee.lastname
FROM employees as e
INNER JOIN employees as ee
ON e.employeeid = ee.reportsto

po tym zapytaniu dostaje pary boss - podwładny. przy czym bossowie się powtarzają

1

Fakt, za szybko to opisalem, problem polega na tym, że join spowoduje, że to nie zadziała prawidłowo.
Zmień na coś takiego:

SELECT e.firstname 
       , e.lastname 
       , Sum(od.quantity * od.unitprice * ( 1 - od.discount )) 
FROM   employees AS e 
       INNER JOIN orders AS o 
               ON e.employeeid = o.employeeid 
       INNER JOIN [order details] AS od 
               ON o.orderid = od.orderid 
WHERE  e.employeeid IN (SELECT reportsto 
                        FROM   employees) 
GROUP  BY e.firstname 
          , e.lastname 
ORDER  BY 3 DESC 

A i distinct przy group by nie jest ci potrzebny

1 użytkowników online, w tym zalogowanych: 0, gości: 1