SELECT count (person.vorname) AS a
FROM Person INNER JOIN ((Gruppe INNER JOIN (Lager INNER JOIN stGrLa ON Lager.LaID = stGrLa.Lager) ON Gruppe.GrID = stGrLa.Gruppe) INNER JOIN stTeGr ON Gruppe.GrID = stTeGr.Gruppe) ON Person.PeID = stTeGr.Person;
SELECT count(peid) AS b
FROM Person INNER JOIN ((Gruppe INNER JOIN (Lager INNER JOIN stGrLa ON Lager.LaID = stGrLa.Lager) ON Gruppe.GrID = stGrLa.Gruppe) INNER JOIN stGrLe ON Gruppe.GrID = stGrLe.Gruppe) ON Person.PeID = stGrLe.Person;
SELECT count(peid) AS c
FROM Person INNER JOIN (Lager INNER JOIN stLaSt ON Lager.LaID = stLaSt.Lager) ON Person.PeID = stLaSt.Person;
SELECT sum(a+b+c);
Das ganze Funktioniert aber nicht. Hier ->SELECT sum(a+b+c) erscheint immer die Fehlermeldeung das a nicht existiert. Was mach ich falsch und wie geht es richtig??
Zum Verständnis: Es soll am Schluss die Gesamtsumme der 3 Abfragen angezeigt werden.
Das waren 3 Abfragen, die je eine Spalte liefern. Du willst
SELECT sum(a+b+c);
nun praktisch diese 3 Zeilen als eine Tabelle mit einer Spalte und von dieser Spalte die Summe.
Also vereint man zuerst einmal mit UNION die 3 Teilergebnisse. Ich mache das mal ganz simpel:
test=*# select 5 union select 6 union select 7;
?column?
----------
5
6
7
(3 rows)
Damit wir die Spalte vernünftig ansprechen können, geben wir der einen Namen, sagen wir mal a.
Außerdem geben wir der Result-Tabelle auch einen Namen, sagen wir mal x. Und nun wollen wir die Summe der Spalte a aus der Tabelle x:
test=# select sum(x.a) from (select 5 as a union select 6 as a union select 7as a) x;
sum
-----
18
(1 row)
Prinzip verstanden? Du brauchst nun nur noch die 3 einzelnen Selects von mir mit den von Dir ersetzen.
SELECT COUNT(person.peid) AS a
FROM Person INNER JOIN (Lager INNER JOIN ((Gruppe INNER JOIN stGrLa ON Gruppe.GrID = stGrLa.Gruppe) INNER JOIN stTeGr ON Gruppe.GrID = stTeGr.Gruppe) ON Lager.LaID = stGrLa.Lager) ON Person.PeID = stTeGr.Person
WHERE (((Lager.LaID)=2))
UNION
SELECT COUNT(person.peid) AS a
FROM Person INNER JOIN ((Lager INNER JOIN (Gruppe INNER JOIN stGrLa ON Gruppe.GrID = stGrLa.Gruppe) ON Lager.LaID = stGrLa.Lager) INNER JOIN stGrLe ON Gruppe.GrID = stGrLe.Gruppe) ON Person.PeID = stGrLe.Person
WHERE (((Lager.LaID)=2))
UNION
SELECT COUNT (person.peid) AS a
FROM Person INNER JOIN (Lager INNER JOIN stLaSt ON Lager.LaID = stLaSt.Lager) ON Person.PeID = stLaSt.Person
WHERE (((Lager.LaID)=2))
)
x;
die Erste Abfrage gibt 26 zurück, die zweite 5 und die 3. auch 5. Zusammen - Laut PGSQL gibt das 31.
Wenn die Abfragen 26, 5 und 6 zurückgeben kommt 37 als Ergebnis raus.
Wie geht sowas. Kann das Ding nicht mehr rechnen??