SQL Server: Ich habe eine Abwesenheitstabelle, die einen Datensatz pro Abwesenheit eines Mitarbeiters enthält. Darin sind das Start- und Enddatum der Abwesenheit enthalten. z.B
Person Ref Start Date End Date
---------------------------------------
1234 01/01/2021 05/01/2021
Ich möchte diese Zeile basierend auf dem Datumsbereich in mehrere Zeilen aufteilen, sodass anstelle einer Zeile für die Abwesenheit eine Zeile für jeden Tag der Abwesenheit vorhanden ist, wie folgt:
Person Ref Start Date End Date
------------------------------------
1234 01/01/2021 01/01/2021
1234 02/01/2021 02/01/2021
1234 03/01/2021 03/01/2021
1234 04/01/2021 04/01/2021
1234 05/01/2021 05/01/2021
Ist es möglich, die Zeile basierend auf dem Datumsbereich in separate Zeilen aufzuteilen, sodass jeder Abwesenheitstag eine eigene Zeile hat? Danke im Voraus.
Es ist erwähnenswert, dass dies Quelldaten sind und in einen Staging-Bereich umgewandelt würden.
UPDATE: Ich habe noch ein kleines Problem, könnten Sie mir helfen? In meiner aktuellen Tabelle gibt es auch eine Spalte, wie viele Schichten bei Abwesenheit ausgefallen sind mit Personenbezug, Start- und Enddatum. Im Moment bedeutet die Aufteilung des Datensatzes in mehrere Zeilen, die jeden Tag und nicht einen Zeitrahmen darstellen, dass die Spalte für die Anzahl der verlorenen Schichten dupliziert wird. zB in der alten Tabelle, wenn jemand für 5 Tage frei ist und 3 Schichten verliert, gibt es in der neuen Tabelle 3 Zeilen - eine für jeden Tag - und jeder Tag wird als 3-Schicht-Ausfall angezeigt. Gibt es eine Möglichkeit das aufzuteilen?
Um dies besser zu erklären, sah die Tabelle früher so aus:
Person Ref Start Date End Date Shifts Lost
--------------------------------------------------
1234 01/01/2021 05/01/2021 3
Jetzt sieht es so aus (wegen der Aufteilung die wir gemacht haben)
Person Ref Start Date End Date Shifts Lost
--------------------------------------------------
1234 01/01/2021 01/01/2021 3
1234 02/01/2021 02/01/2021 3
1234 03/01/2021 03/01/2021 3
1234 04/01/2021 04/01/2021 3
1234 05/01/2021 05/01/2021 3
Gibt es eine Möglichkeit, die Anzahl der 3 verlorenen Verschiebungen zwischen den Zeilen aufzuteilen? Aufgrund von Schichtmustern wird jemand, der 5 Tage abwesend ist, nicht unbedingt 5 Schichten verpassen, in diesem Fall verpassen sie 3. Gibt es eine Möglichkeit, dies so zu gestalten:
Person Ref Start Date End Date Shifts Lost
--------------------------------------------------
1234 01/01/2021 01/01/2021 1
1234 02/01/2021 02/01/2021 1
1234 03/01/2021 03/01/2021 1
1234 04/01/2021 04/01/2021 0
1234 05/01/2021 05/01/2021 0
Vielen Dank
Wenn Sie keine Kalendertabelle haben (sehr zu empfehlen), können Sie eine Ad-hoc-Zähltabelle zusammen mit einem einfachen JOIN verwenden.
Sie werden feststellen Top 1000
, dass dies auf ein angemesseneres Niveau eingestellt werden kann.
Beispiel oder dbFiddle
Select [Person Ref]
,[Start Date] = dateadd(DAY,N,[Start Date])
,[End Date] = dateadd(DAY,N,[Start Date])
From YourTable A
Join (
Select Top 1000 N=-1+Row_Number() Over (Order By (Select Null))
From master..spt_values n1,master..spt_values n2
) B on N <= datediff(DAY,[Start Date],[End Date])
Kehrt zurück
Person Ref Start Date End Date
1234 2021-01-01 2021-01-01
1234 2021-01-02 2021-01-02
1234 2021-01-03 2021-01-03
1234 2021-01-04 2021-01-04
1234 2021-01-05 2021-01-05
Update --- Schichten verloren
Select [Person Ref]
,[Start Date] = dateadd(DAY,N,[Start Date])
,[End Date] = dateadd(DAY,N,[Start Date])
,[Shifts Lost]= case when N<[Shifts Lost] then 1 else 0 end
From YourTable A
Join (
Select Top 10000 N=-1+Row_Number() Over (Order By (Select Null))
From master..spt_values n1,master..spt_values n2
) B on N <= datediff(DAY,[Start Date],[End Date])
Ergebnisse
Person Ref Start Date End Date Shifts Lost
1234 2021-01-01 2021-01-01 1
1234 2021-01-02 2021-01-02 1
1234 2021-01-03 2021-01-03 1
1234 2021-01-04 2021-01-04 0
1234 2021-01-05 2021-01-05 0
Dieser Artikel stammt aus dem Internet. Bitte geben Sie beim Nachdruck die Quelle an.
Bei Verstößen wenden Sie sich bitte [email protected] Löschen.
Lass mich ein paar Worte sagen