Zweimal HAVING in einer Abfrage - oder andere Lösung?
Mecha
- datenbank
Hallo allerseits,
Ich stehe vor folgendem Problem:
Ich bin grade dabei, den alten Urlaubsplaner unserer Firma durch ein Webfrontend zu ersetzen.
Dafür habe ich zwei Tabellen angelegt: Tabelle "Mitarbeiter" mit Vorname, Nachname, Urlaubsanspruch etc.
Tabelle "Urlaub" mit eingetragenen Urlaubsdaten (Start- und Enddatum, Dauer,Gesamtwochen etc.).
Nach langem Rumprobieren habe ich die Tabelle "Urlaub" geändert: Ein Eintrag gilt nur für maximal 5 Tage; sind es mehr, werden zusätzliche Einträge eingefügt. Beispiel:
Hansi Müller hat vom 17.11.08 bis 28.11.08 zehn Tage Urlaub.
Jetzt gibt es einen Eintrag vom 17.11.-21.11. und einen zweiten vom 24.11.-28.11.
Soweit, so gut, doch nun brauche ich für die Gesamtübersicht sämtliche Einträge der Mitarbeiter - egal ob diese bereits Urlaub genommen haben oder nicht.
Das geht ja auch noch, ABER:
Urlaubseinträge, die mehr als eine Gesamtwoche betragen, sollen zusammengefasst werden. Nur bekomme ich mit meinen Statements entweder nur die Leute, die Urlaub hatten, oder nur die, die noch keinen hatten.
SELECT m.kuerzel,nachname,vorname,
urlaubsanspruch,urlaub_genommen,resturlaub,u1.startdatum,
u1.enddatum,u1.dauer, u1.wochen_gesamt,u1.woche,u1.urlaubsid
FROM mitarbeiter as m
LEFT OUTER JOIN
urlaub as u1
ON m.kuerzel = u1.kuerzel
GROUP BY u1.urlaubsid
HAVING u1.urlaubsid is not null
"IS NOT NULL" gibt mir halt die tatsächlichen Urlaube, "IS NULL" die Mitarbeiter, die keinen Urlaub hatten - nur wie kriege ich das beides unter einen Hut?
Gruß,
Michaela
Hansi Müller hat vom 17.11.08 bis 28.11.08 zehn Tage Urlaub.
Jetzt gibt es einen Eintrag vom 17.11.-21.11. und einen zweiten vom 24.11.-28.11.
Da hast du sicher viel Rechnerei und Abgrenzungsprobleme. Weihnachten, Oster- Pfingstmontag und andere Feiertage. In der Industrie erstellt man einen oder mehrere Werkkalender.
In denen werden die Werktage eines Jahres durchgezählt. Falls das Wochenende frei ist, hat der Freitag z.B. die Tagnummer 168, der Montag 169.
Ein anderer Kalender im selben Unternehmen kann die Wochenenden mitzählen.
Boomer
Da hast du sicher viel Rechnerei und Abgrenzungsprobleme. Weihnachten, Oster- Pfingstmontag und andere Feiertage. In der Industrie erstellt man einen oder mehrere Werkkalender.
In denen werden die Werktage eines Jahres durchgezählt. Falls das Wochenende frei ist, hat der Freitag z.B. die Tagnummer 168, der Montag 169.
Ein anderer Kalender im selben Unternehmen kann die Wochenenden mitzählen.
Boomer
Hast Recht, darüber habe ich mir anfangs wenig Gedanken gemacht. Ich dachte, je weniger Datenbankeinträge desto besser.
Aber mein Problem hat sich mit einem simplen
GROUP BY kuerzel,startdatum
letztlich gelöst :-)