Einzelnen Beitrag anzeigen

nahpets
(Gast)

n/a Beiträge
 
#10

Re: 2 SQL-Abfragen kombinieren

  Alt 30. Jul 2008, 09:27
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
  Mit Zitat antworten Zitat