Du müsstest eine Tabelle aller Abteilungen und Gegenstände haben (wenn du auch 0-Werte für die Gegenstände haben willst).
Bleiben wir mal bei Abteilungen. Dann machst Du ein LEFT JOIN deiner Abteilungen auf deine Auswertung und bekommst so automatisch alle Abteilungen und -falls Daten vorhanden sind- eben auch Werte. Wenn nicht, dann steht da NULL, aber das kannst du dann ja auf 0 ändern.
So z.B.:
SQL-Code:
select A.Abteilung,
S.Gegenstand,
Count(S.Key)
from AlleAbteilungen A
left join tt s on A.Abteilung = s.Abteilung
where zeit between(startdate,eddate)
group by s.Abteilung,s.Gegenstand
Jumpy's Lösung ist auch cool, würde aber etwas länger dauern, wenn in TT sehr viele Zeilen sind und kein Index auf der Abteilung/Gegenstand ist. Dann muss er ja vorher die gante Tabelle abgrasen, um alle Abteilungen zu bekommen. Außerdem (mecker mecker) funktioniert das nicht, wenn eine Abteilung X, die angezeigt werden soll, bisher noch keine Werte hat.