Det handlar om en kartesisk produkt (där rader i en tabell multipliceras med raderna i de andra tabellerna). Antagandet som följande tillvägagångssätt gör är att varje projekt har en arbetsbelastning med tilldelade anställda (som alla står för alla anställda eftersom din fråga inte visar kopplingen till medarbetartabellen) och uppgifter. Om detta inte är fallet, överväg att göra yttre sammanfogningar kontra den inre sammanfogningen.
Tanken är att utföra varje aggregering i sin egen härledda tabell baserat på projektnummer. Vi kan sedan sammanfoga varje härledd tabell efter projektnummer för att få meningsfulla resultat.
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;