Einzelnen Beitrag anzeigen

Volker Z.

Registriert seit: 3. Dez 2012
Ort: Augsburg, Bayern, Süddeutschland
419 Beiträge
 
Delphi XE4 Ultimate
 
#5

AW: SQL für die Abfrage dreier Tabellen

  Alt 19. Apr 2013, 22:29
Hallo,

unter der Annahme, dass Deine drei Tabellen (Kurzfassung etwas angepasst) folgendermaßen definiert sind:
Code:
Mitarbeiter (ID, Vorname, Nachname)
Arbeitszeit (ID, Mitarbeiter_ID, Stunden)
Abwesenheit (ID, Mitarbeiter_ID, Stunden)
Dann sollte Dir das folgendes SQL-Statement
SQL-Code:
SELECT "Mitarbeiter"."Vorname" + SPACE (1) + "Mitarbeiter"."Nachname" AS Name, SUM( "Arbeitszeit"."Stunden" ) AS "Arbeitszeit (Stunden)", SUM( "Abwesenheit"."Stunden" ) AS "Abwesenheit (Stunden)"
FROM Mitarbeiter
LEFT OUTER JOIN "Arbeitszeit" ON "Mitarbeiter"."ID" = "Arbeitszeit"."Mitarbeiter_ID"
LEFT OUTER JOIN "Abwesenheit" ON "Mitarbeiter"."ID" = "Abwesenheit"."Mitarbeiter_ID"
GROUP BY Name
das gewünschte Ergebnis liefern
Code:
| Name           | Arbeitszeit (Stunden) | Abwesenheit (Stunden) |
|----------------+-----------------------+-----------------------|
| Max Mustermann | 130                   | 8                     |
Ich kenne jetzt zwar den Rest Deiner Tabellendefinitionen nicht, aber denk mal darüber nach, welchen Informationsgehalt obiges Ergebnis hat, wenn in der Entwicklungsabteilung ein Max Mustermann an neuen Gebrauchsmustern tüftelt und gleichzeitig - weder verwandt noch verschwägert - in der konzerneigenen Kantine ein Max Mustermann (unterschiedlichen Mitarbeiter ID) für das Scheuern gebrauchter Töpfe und Pfannen zuständig ist? Wie teilen sich dann die Anwesenheits- und Abwesenheitsstunden auf?

Mit:
SQL-Code:
SELECT "Mitarbeiter"."ID" AS ID, "Mitarbeiter"."Vorname" + SPACE (1) + "Mitarbeiter"."Nachname" AS Name, SUM( "Arbeitszeit"."Stunden" ) AS "Arbeitszeit (Stunden)", SUM( "Abwesenheit"."Stunden" ) AS "Abwesenheit (Stunden)"
FROM Mitarbeiter
LEFT OUTER JOIN "Arbeitszeit" ON "Mitarbeiter"."ID" = "Arbeitszeit"."Mitarbeiter_ID"
LEFT OUTER JOIN "Abwesenheit" ON "Mitarbeiter"."ID" = "Abwesenheit"."Mitarbeiter_ID"
GROUP BY "Mitarbeiter"."ID", Name
Bekommst Du zumindest
Code:
| ID | Name           | Arbeitszeit (Stunden) | Abwesenheit (Stunden) |
|---------------------+-----------------------+-----------------------|
| 27 | Max Mustermann | 60                    | 8                     |
| 81 | Max Mustermann | 70                    | 0                     |
Gruß
Volker Zeller
  Mit Zitat antworten Zitat