SQL Mehrere Count Abfragen kombinieren

JakeD

Cadet 4th Year
Registriert
Okt. 2009
Beiträge
67
Hallo zusammen,

ich habe folgende Tabellenstruktur:


Tabelle Fehler
EID Name BID SID
1 Fehler1 1 1
2 Fehler2 2 1
3 Fehler3 1 2
3 Fehler4 1 3
3 Fehler5 3 2


Tabelle Bereich
BID Name
1 Intern
2 Extern
3 Unbekannt

Tabelle Status
SID Name
1 Neu
2 Alt
3 Erledigt


Ich möchte zählen wie viele Fehler je Status und Bereich vorhanden sind. Möglichst in einer Tabelle.
Bisher habe ich je Bereich eine eigene Abfrage gebaut.

Code:
SELECT        COUNT(Fehler.SID) AS Anzahl, Status.Name, Fehler.BID
FROM            Status LEFT OUTER JOIN
                         Fehler ON Fehler.SID = Status.SID
WHERE        (Fehler.BID = 1)
GROUP BY Status.SID, Status.Name

Ergebnis
Anzahl Status.Name Fehler.BID
5 Neu 1
423 Alt 1
4 Erledigt 1

Das war bisher auch ausreichend. Nun ist es erforderlich alle Abfragen zu kombinieren, damit die komplette Auflistung in einer Tabelle erscheint. Ich komme da echt nicht weiter. Das Wunschergebnis soll so aussehen:

Ergebnis
Status.Name Bereich1 Bereich2 Bereich3
Neu 23 123 11
Alt 0 0 156
Erledigt 123 16 0


Vielleicht hat ja jemand eine Idee :)

Vielen Dank im Voraus.
 
Was du da haben möchtest nennt sich Pivot-Tabelle. Je nach Datenbank-System wird das besser oder schlechter unterstützt. Such' nach "pivot sql <dein rdbs>".
 
Danke für das Stichwort. Hab ich bisher noch nie mit gearbeitet. Sieht auf den Ersten Blick relativ kompliziert aus :(
 
nenn mal dein datenbanksystem..
 
Zuletzt bearbeitet:
Gehts nicht auch so?

Code:
SELECT s.Name, COUNT(b1.BID) Bereich1, COUNT(b2.BID) Bereich2, COUNT(b3.BID) Bereich3
FROM Fehler f
JOIN Status s ON f.SID = s.SID
LEFT JOIN Bereich b1 ON b1.BID = f.BID AND b1.BID = 1
LEFT JOIN Bereich b2 ON b2.BID = f.BID AND b2.BID = 2
LEFT JOIN Bereich b3 ON b3.BID = f.BID AND b3.BID = 3
GROUP BY s.Name
 
Enurian schrieb:
Gehts nicht auch so?

Code:
SELECT s.Name, COUNT(b1.BID) Bereich1, COUNT(b2.BID) Bereich2, COUNT(b3.BID) Bereich3
FROM Fehler f
JOIN Status s ON f.SID = s.SID
LEFT JOIN Bereich b1 ON b1.BID = f.BID AND b1.BID = 1
LEFT JOIN Bereich b2 ON b2.BID = f.BID AND b2.BID = 2
LEFT JOIN Bereich b3 ON b3.BID = f.BID AND b3.BID = 3
GROUP BY s.Name

Perfekt, das hat super funktioniert. :)
 
Zurück
Oben