(Dies ist in DB2 Version 9.5)Ist das mit plain SQL möglich? Oder ist ein Verfahren erforderlich?
sagen, dass ich eine Tabelle mit vier Spalten:
C1: [EmployeeId]
C2: [StartDate] yyyy-mm-dd format
C3: [EndDate] yyyy-mm-dd format
C4: [Age]
Die Kombination [EmployeeId + Startdate] bildet den Primärschlüssel.
nun die folgenden Beispielreihen berücksichtigen:
1 2010-01-16 2010-04-16 29
2 2010-02-16 2010-03-16 33
3 2010-05-16 2010-05-16 31
Es gibt eine Garantie, dass alle Tage wird der 16. Tag, über alle Termine, in allen Reihen sein. Keine andere Möglichkeit.
Ich versuche, eine Abfrage zu schreiben, die die folgenden tun:
Für jede Zeile, in dem Startmonat ist kleiner als die Endung Monat (wie Zeile 1), replizieren die Zeile für jeden Monat zwischen einschließlich der letzten Reihe. So, nachdem die Abfrage ausgeführt wird, werden die neuen Zeilen für Zeile 1:
1 2010-01-16 2010-04-16 29
1 2010-02-16 2010-04-16 29
1 2010-03-16 2010-04-16 29
1 2010-04-16 2010-04-16 29
Für Zeilen, in denen die Startmonat und das Ende Monat die gleichen sind, nichts tun. Für Zeilen, bei denen der Endmonat der Monat unmittelbar nach dem Startmonat ist, wird eine neue Zeile eingefügt (siehe die letzte Zeile oben, um den Grund zu verstehen).
Fragen:
- Ist das möglich in Klar SQL? Oder sind Verfahren erforderlich?
- Wenn ja, wie? (Hinweise, Code, alles)
Danke fürs Lesen Jungs. Die Problemstellung ist komplex, ich hoffe, ich habe einen fairen Job gemacht, um es zu erklären. Jede Unklarheit oder Inkonsistenz: Bitte weisen Sie darauf hin und ich werde es so schnell wie möglich bearbeiten.
Die größte Sorge sehe ich nichts hat mit dem SQL zu tun, sondern mit der Garantie, dass die Tage wird der 16. Tag. Die Erfahrung sagt mir, dass sich dies ändern wird, sobald genug Zeit vergangen ist, in der du nicht verstehst, warum du es so codiert hast. –