Aus 2 Abfragen 1 machen

07/11/2008 - 10:52 von Stefan Wirrer | Report spam
Hallo,

ich hab ein nettes SQL-Problem ;-)
Ich will wissen, wieviele Mitarbeiter in einer Abteilung an einem bestimmten
Tag sind.

Über einen Trigger im ProstgeSQL-BE werden die Abteilungswechsel
mitgeloggt.
In der Tabelle tbl_MA_Abt steht FK-Mitarbeiter, FK-NeueAbt und das
Datum

Abfrage 1 liefert mir die Abteilungen zurück.
Abfrage1 SELECT (SELECT TOP 1 tbl_MA_Abt.fs_pma_abteilung
FROM tbl_MA_Abt
WHERE tbl_MA_Abt.fs_pma_mitarbeiter = [index_ma]
AND tbl_MA_Abt.pmadatum <= #3/1/2006#
ORDER BY tbl_MA_Abt.pmadatum DESC) AS Dept
FROM tbl_Mitarbeiter INNER JOIN tbl_MA_Daten
ON tbl_Mitarbeiter.index_ma = tbl_MA_Daten.fs_index_ma
WHERE tbl_MA_Daten.eintritt <= #3/1/2006#
AND (tbl_MA_Daten.austritt Is Null
Or tbl_MA_Daten.austritt >= #3/1/2006#)
AND tbl_Mitarbeiter.fs_id_vabt Not In (15,22,23);

Das Ergebnis müsste 'nur' noch nach Abt. gruppiert werden und die
entsprechende Anzahl daneben stehen.
Statt 5,2,3,7,3,5,3,3,5, ...
brauche ich
Abt -> Anz
5 -> 3
2 -> 1
3 -> 4
7 -> 1
...

Die folgende liefert mir das gewünschte Ergebnis:
SELECT Abfrage1.Dept, Count(tbl_Volke_Abt.v_abt) AS CountDept
FROM Abfrage1 INNER JOIN tbl_Volke_Abt
ON Abfrage1.Dept = tbl_Volke_Abt.id_volke_abt
GROUP BY Abfrage1.Dept;
jedoch dauerst das mehr als 10 Minuten.

Wie bekomme ich das Ganze in 1 SQL-Statement?
Das ich dann sicherlich auf dem DB-Server ausführen lassen muss.

Danke für die Unterstützung

Grüße aus München
Stefan
 

Lesen sie die antworten

#1 Mark Doerbandt
07/11/2008 - 11:51 | Warnen spam
Hallo, Stefan,

Stefan Wirrer:

Die folgende liefert mir das gewünschte Ergebnis:
SELECT Abfrage1.Dept, Count(tbl_Volke_Abt.v_abt) AS CountDept
FROM Abfrage1 INNER JOIN tbl_Volke_Abt
ON Abfrage1.Dept = tbl_Volke_Abt.id_volke_abt
GROUP BY Abfrage1.Dept;
jedoch dauerst das mehr als 10 Minuten.

Wie bekomme ich das Ganze in 1 SQL-Statement?
Das ich dann sicherlich auf dem DB-Server ausführen lassen muss.



hast Du alternativ mal probiert, das Ergebnis der ersten Abfrage in
eine Temp-Tabelle zu schreiben und darauf die zweite auszuführen?

Gruss - Mark

Ähnliche fragen