Einzelnen Beitrag anzeigen

Agasch

Registriert seit: 13. Apr 2014
8 Beiträge
 
#1

InterBase Group By / Left Join / 3xgleiche Tabelle??

  Alt 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
  Mit Zitat antworten Zitat