Registriert seit: 13. Apr 2014
8 Beiträge
|
InterBase Group By / Left Join / 3xgleiche Tabelle??
13. Apr 2014, 07:54
Datenbank: InterBase • Version: XE • Zugriff über: Delphi Prof. XE
Moin,
versuche gerade das Gruppieren/Berechnen von Daten und das Anwenden von Joins zu erlernen. Hier stehe ich aber irgendwie auf dem Schlauch....
Habe 2 Tabellen:
Tabelle: Personal
Feld: PERSONAL_ID
Daten in der Tabelle: PERSONAL_ID=1
Tabelle: FEHLTAGE
Felder: FEHLTAGE_ID, FEHLTAGE_PERSONALID, FEHLTAGE_ARBEITSTAGE, FEHLTAGE_ART
-> ART bedeutet: U(rlaub), K(rank), F(ehlt)
Daten in der Tabelle "FEHLTAGE":
FEHLTAGE_ID FEHLTAGE_PERSONALID FEHLTAGE_ART FEHLTAGE_ARBEITSTAGE
=========== =================== ============ ====================
1 1 U 10
2 1 U 7
3 1 F 1
4 1 K 5
5 1 K 2
d.h
PERSONAL_ID hat dann: 17 Tage Urlaub, 1 Tag gefehlt und 7 Tage krank gemacht.
Ich will jetzt auf die Tabelle Fehltage 3x zugreifen:
select
P.PERSONAL_ID,
Sum(U.FEHLTAGE_ARBEITSTAGE) as URLAUB,
Sum(F.FEHLTAGE_ARBEITSTAGE) as FEHLTAGE,
Sum(K.FEHLTAGE_ARBEITSTAGE) as KRANK
from PERSONAL P
LEFT JOIN FEHLTAGE U ON (U.FEHLTAGE_PERSONALID=P.PERSONAL_ID AND U.FEHLTAGE_ART='U')
LEFT JOIN FEHLTAGE F ON (F.FEHLTAGE_PERSONALID=P.PERSONAL_ID AND F.FEHLTAGE_ART='F')
LEFT JOIN FEHLTAGE K ON (K.FEHLTAGE_PERSONALID=P.PERSONAL_ID AND K.FEHLTAGE_ART='K')
GROUP BY P.PERSONAL_ID
Richtig wäre:
PERSONAL_ID=1 URLAUB=17 FEHLTAGE=1 KRANK=7
Bekomme jedoch:
PERSONAL_ID=1 URLAUB=31 FEHLTAGE=4 KRANK=14
Setze ich meine SQL_Anweisung schrittweise ein, dh nur ein Left Join, bekomme ich den richtigen Wert, aber 2 oder 3 liefern die falschen Werte.
Wie müüste das richtig aussehen?
Danke im Voraus
Andreas
|