Felder ersetzen in Select-Klausel

Hi!

Kann man in einem SQL die Felder in der Select-Klausel ersetzen?

Folgender Fall:

In einer Tabelle sind Mitarbeiter-Daten gespeichert (PersonalNummer, persönliche Daten, usw., außerdem die Uhrzeit, wann der Mitarbeiter seine Arbeit zu beginnen hat und wann er aufzuhören hat).

PERS_NR (PK)
SOLL_UHRZEIT_BEGINN
SOLL_UHRZEIT_ENDE

In einer zweiten Tabelle wird festgehalten, wann der Mitarbeiter tatsächlich gearbeitet hat. Die Tabelle hat einen künstlichen Schlüssel namens SATZ_ID

SATZ_ID (PK)
PERS_NR (FK)
DATUM
WOCHENTAG
IST_UHRZEIT_BEGINN
IST_UHRZEIT_ENDE

Nun hat aber jeder Mitarbeiter das Recht, einmal pro Woche eine abweichende Soll-Tagesarbeitszeit zu beantragen. Manche Leute wollen Freitags früh gehen, andere wollen Mittwoch eher Schluss machen, wieder andere kommen Montags später. Also dritte Tabelle:

PERS_NR (PK, FK)
WOCHENTAG
SOLL_UHRZEIT_BEGINN
SOLL_UHRZEIT_ENDE

Soweit die Tabellen. Nun die Aufgabe, an der ich gescheitert bin:

Wie bekommt man mit einem SQL die Arbeitszeitdifferenzen zwischen Soll- und Ist-Tagesarbeitszeit heraus unter Berücksichtigung der abweichenden Soll-Tagesarbeitszeiten?

Grüße
Heinrich

Hi!

Unter Oracle würde ich es auf die Schnelle mittels Outer-Join so machen:

select a.pers\_nr
 ,b.datum
 ,decode(c.wochentag,null,
 (a.soll\_uhrzeit\_ende-a.soll\_uhrzeit\_beginn)-
 (b.ist\_uhrzeit\_ende-b.ist\_uhrzeit\_beginn),
 (c.soll\_uhrzeit\_ende-c.soll\_uhrzeit\_beginn)-
 (b.ist\_uhrzeit\_ende-b.ist\_uhrzeit\_beginn)) differenz
from erste\_tabelle a
 ,zweite\_tabelle b
 ,dritte\_tabelle c
where a.pers\_nr=b.pers\_nr
 and a.pers\_nr=c.pers\_nr(+)
 and to\_char(datum,'DAY') = c.wochentag (+)

Alles ohne es überprüft oder ausprobiert zu haben - mit einem UNION (erstes Select über die „Normal-Zeiten“, zweites über die „Einmal in der Woche-Zeit“) wäre auch noch eine Möglichkeit

Grüße,
Tomh