MS SQL SMS - Zwei Datumswerte (von-bis) in einzelne Zeilen aufteilen
Ahoi allerseits,
ich stehe auf dem Schlauch.
Auch all meine Suchen liefen bisher ins Leere. Also probier ichs hier mal.
Wir haben hier eine Tabelle "Abwesenheit".
Dort sind Datensätze in folgender Form vorhanden:
PersNr - Abwgrnd - von - bis
1111 - Urlaub - 22.07.2019 - 26.07.2019
2222 - krank - 22.07.2019 - 23.07.2019
3333 - Schule - 22.07.2019 - 24.07.2019
Ich möchte nun die Datensätze aufteilen:
1111 - Urlaub - 22.07.2019 - 26.07.2019 | 22.07.2019
1111 - Urlaub - 22.07.2019 - 26.07.2019 | 23.07.2019
1111 - Urlaub - 22.07.2019 - 26.07.2019 | 24.07.2019
1111 - Urlaub - 22.07.2019 - 26.07.2019 | 25.07.2019
1111 - Urlaub - 22.07.2019 - 26.07.2019 | 26.07.2019
2222 - krank - 22.07.2019 - 23.07.2019 | 22.07.2019
2222 - krank - 22.07.2019 - 23.07.2019 | 22.07.2019
3333 - Schule - 22.07.2019 - 24.07.2019 | 22.07.2019
3333 - Schule - 22.07.2019 - 24.07.2019 | 23.07.2019
3333 - Schule - 22.07.2019 - 24.07.2019 | 24.07.2019
Über Hilfe würde ich mich sehr freuen.
PS: Sollte das so nicht möglich sein, könnte ich noch einen Kalender joinen.
Vielen Dank vorab!
ich stehe auf dem Schlauch.
Auch all meine Suchen liefen bisher ins Leere. Also probier ichs hier mal.
Wir haben hier eine Tabelle "Abwesenheit".
Dort sind Datensätze in folgender Form vorhanden:
PersNr - Abwgrnd - von - bis
1111 - Urlaub - 22.07.2019 - 26.07.2019
2222 - krank - 22.07.2019 - 23.07.2019
3333 - Schule - 22.07.2019 - 24.07.2019
Ich möchte nun die Datensätze aufteilen:
1111 - Urlaub - 22.07.2019 - 26.07.2019 | 22.07.2019
1111 - Urlaub - 22.07.2019 - 26.07.2019 | 23.07.2019
1111 - Urlaub - 22.07.2019 - 26.07.2019 | 24.07.2019
1111 - Urlaub - 22.07.2019 - 26.07.2019 | 25.07.2019
1111 - Urlaub - 22.07.2019 - 26.07.2019 | 26.07.2019
2222 - krank - 22.07.2019 - 23.07.2019 | 22.07.2019
2222 - krank - 22.07.2019 - 23.07.2019 | 22.07.2019
3333 - Schule - 22.07.2019 - 24.07.2019 | 22.07.2019
3333 - Schule - 22.07.2019 - 24.07.2019 | 23.07.2019
3333 - Schule - 22.07.2019 - 24.07.2019 | 24.07.2019
Über Hilfe würde ich mich sehr freuen.
PS: Sollte das so nicht möglich sein, könnte ich noch einen Kalender joinen.
Vielen Dank vorab!
Bitte markiere auch die Kommentare, die zur Lösung des Beitrags beigetragen haben
Content-ID: 489351
Url: https://administrator.de/forum/ms-sql-sms-zwei-datumswerte-von-bis-in-einzelne-zeilen-aufteilen-489351.html
Ausgedruckt am: 22.12.2024 um 03:12 Uhr
2 Kommentare
Neuester Kommentar
ist möglich:
Ist aber jetzt PostgreSQL. Da sind 2 Features, die M$SQL vermutlich nicht hat:
test=*# select * from c0nsp1r4cy ;
pernr | grund | von | bis
-------+--------+------------+------------
111 | Urlaub | 2019-07-22 | 2019-07-26
2222 | krank | 2019-07-22 | 2019-07-23
3333 | Schule | 2019-07-22 | 2019-07-24
(3 rows)
test=*# select c.*, d.d::date from c0nsp1r4cy c left join lateral (select * from generate_series(c.von, c.bis, '1day'::interval)d) d on true;
pernr | grund | von | bis | d
-------+--------+------------+------------+------------
111 | Urlaub | 2019-07-22 | 2019-07-26 | 2019-07-22
111 | Urlaub | 2019-07-22 | 2019-07-26 | 2019-07-23
111 | Urlaub | 2019-07-22 | 2019-07-26 | 2019-07-24
111 | Urlaub | 2019-07-22 | 2019-07-26 | 2019-07-25
111 | Urlaub | 2019-07-22 | 2019-07-26 | 2019-07-26
2222 | krank | 2019-07-22 | 2019-07-23 | 2019-07-22
2222 | krank | 2019-07-22 | 2019-07-23 | 2019-07-23
3333 | Schule | 2019-07-22 | 2019-07-24 | 2019-07-22
3333 | Schule | 2019-07-22 | 2019-07-24 | 2019-07-23
3333 | Schule | 2019-07-22 | 2019-07-24 | 2019-07-24
(10 rows)
test=*#
Ist aber jetzt PostgreSQL. Da sind 2 Features, die M$SQL vermutlich nicht hat:
- generate_series(), kann man sich aber in M$SQL wohl nachbauen, Google weiß wie
- LATERAL JOIN, das ist SQL-Standard, können aber IMHO nur sehr wenige Datenbanken