Hallo zusammen,
ich habe eine recht komplexe Abfrage zu machen und weiß nicht, wie ich das am besten hinbekomme.
Also:
Ich habe eine Tabelle, wo Vertragsdaten von Personen drinstehen. Jede Person kann beliebig viele Verträge haben.
Je Vertrag gibt es ein Beginndatum, ein Endedatum, und zusätzlich noch je ein Korrekturfeld für das Beginn- und Endedatum, das aber nicht in jedem Fall gefüllt ist.
Z.B.:
pn | beginn | ende | beginn_korr | ende_korr
------------------------------------------------------
1 | 01.02.2000 | 31.07.2003 | NULL | NULL
1 | 01.08.2003 | 15.01.2004 | NULL | 31.01.2004
...
Ich brauche jetzt für jede Person die Summe ihrer Vertragszeiten, also prinzipiell:
SELECT SUM(DATEDIFF(day, beginn, ende)), pn
FROM tabelle
GROUP by pn
Das Problem sind jetzt aber die "Sonderfälle":
1. Wenn ein Korrekturfeld gefüllt ist, ist dieses zu verwenden (also "beginn_korr" statt "beginn", bzw. "ende_korr" statt "ende")
2. Liegt das Vertragsende in der Zukunft und zwar nach dem nächsten Schulhalbjahresbeginn (1.2. / 1.8.), dann ist der Schulhalbjahresbeginn als Endedatum zu nehmen.
Der "nächste" Schulhalbjahresbeginn ist vom aktuellen Datum aus zu sehen. Z.Zt. ist es der 1.2.08, ab Februar 2008 ist es dann der 1.8.08, usw.
***
Wie kann ich diese Query formulieren?
(MS SQL Server 2005)
Hier hatte ich bereits Hilfe dabei erhalten, das nächste Schulhalbjahr zu bestimmen: http://forum.de.selfhtml.org/archiv/2007/9/t159260/
Danke im Voraus für eure Hilfe!
Sam