Würde Dir das helfen?
SQL-Code:
SELECT c.id, c.itemname, a.alevel, a.itemname, Sum(Anzahl1) As Anzahl1, Sum(Anzahl2) As Anzahl2
FROM
(
SELECT c.id, c.itemname, a.alevel, a.itemname, count(s.id) As Anzahl1, 0 As Anzahl2
FROM tblcats c
LEFT JOIN tblsubcats s
ON c.id = s.parentcat
INNER JOIN tblaccesslevels a
ON c.alevel = a.alevel
WHERE s.alevel <= 1
GROUP BY c.itemname
union all
SELECT c.id, c.itemname, a.alevel, a.itemname, 0 as Anzahl 1, count(p.id) As Anzahl2
FROM tblcats c
LEFT JOIN tblsubcats s
ON c.id = s.parentcat
LEFT JOIN tblpics p
ON p.parentsubcat = s.id
INNER JOIN tblaccesslevels a
ON c.alevel = a.alevel
WHERE s.alevel <= 1
GROUP BY c.itemname
) intern
GROUP BY c.id, c.itemname, a.alevel, a.itemname
Probleme der von Dir gestellten Art löse ich eigentlich immer in dieser Form. Bei Oracle, Postgres und
SQL-Server funktioniert das ordentlich (andere Datenbanken habe ich nicht im Zugriff).
Zuerst werden die Summen der einen Abfrage gebildet und für die Summe der weiteren Abfrage(n) entsprechende Spalten mit 0 vorbelegt. Die Abfragen werden per Union all zusammengefasst und anschließend werden nochmal Summen über die Zusammenfassung gebildet. Hier werden dann die Anzahlen und ganz viele 0en summiert. Durch's Group By erhält man so einen Einzeiler. Die Abfragen werden aber nicht so komplex sondern bleiben überschaubar.
Stephan