Si tratta di un prodotto cartesiano (in cui le righe di una tabella vengono moltiplicate per le righe delle altre tabelle). Il presupposto del seguente approccio è che ogni progetto ha un carico di lavoro con dipendenti assegnati (che rappresentano tutti i dipendenti poiché la query non mostra il join alla tabella dipendenti) e attività. In caso contrario, considera la possibilità di eseguire gli outer join rispetto all'internal join.
L'idea è di eseguire ogni aggregazione nella propria tabella derivata in base al numero di progetto. Possiamo quindi unire ogni tabella derivata per numero di progetto per ottenere risultati significativi.
SELECT
p.NAME,
w.workload_sum AS "Total Workload",
e.employee_count AS "Total Employees",
t.task_count AS "Finished Tasks"
from p
JOIN (select pno, sum(workload) as workload_sum
from w
group by pno) w ON (w.pno=p.pnumber)
JOIN (select pno, count(distinct w.essn) as employee_count
from w
group by pno) e ON (e.pno=p.pnumber)
JOIN (select pno, count(distinct t.name) as task_count
from t
group by pno) t ON (t.pno=p.pnumber)
WHERE t.END_DATE is NOT NULL;