Zum Inhalt springen

MSSQL Datenbank-Abfrage Datensatz für jedes Datum aus Datumsbereich


murat1895

Empfohlene Beiträge

Guten Tag,

ich habe ein Problem und finde derizeit keinen Lösungsansatz.

Vereinfacht dargestellt habe ich eine Tabelle "Test" mit folgenden Feldern und Datentypen:

ID Von Bis
INT, AI DATETIME DATETIME

Ich benötige ein Ergebnis einer SQL-Abfrage welches mir zu einem Datensatz folgendes Liefert.

Beispieldatensatz in der Tabelle: 1, 01.12.2018, 02.02.2018

Das Ergebnis der Abfrage sollte wie folgt aussehen:

ID Datum Von Bis
1 01.12.2018 01.12.2018 02.02.2018
1 02.12.2018 01.12.2018 02.02.2018
1 03.12.2018 01.12.2018 02.02.2018
1 ... 01.12.2018 02.02.2018
1 02.02.2018 01.12.2018 02.02.2018

Habt Ihr einen Lösungsvorschlag bzw. Lösungsansatz?

Vielen Dank!

Link zu diesem Kommentar
Auf anderen Seiten teilen

vor 40 Minuten schrieb murat1895:

Ich benötige ein Ergebnis einer SQL-Abfrage welches mir zu einem Datensatz folgendes Liefert.

Wieviel zahlst du / dein Unternehmen denn dafür? Immerhin muss hier ja 100% Fremdleistung erbracht werden. Günstig wird das wohl nicht.

 

vor 41 Minuten schrieb murat1895:

Habt Ihr einen Lösungsvorschlag bzw. Lösungsansatz?

Du hast doch sicherlich schon versucht, eine Lösung auszuarbeiten. Wie wäre es, wenn du uns diese präsentierst und wir dir bei der Korrektur behilflich sind? Das ist immerhin für dich gut - denn dadurch lernst du mehr etwas UND es kostet dich nix (siehe oben) - WIN/WIN quasi.

Ist doch doof, die anderen die Arbeit machen zu lassen..

Link zu diesem Kommentar
Auf anderen Seiten teilen

vor 20 Minuten schrieb Gottlike:

Ist es gewollt, dass die ID überall gleich ist?
Woher kommt plötzlich die Spalte Datum? Soll diese gleich der Spalte "von" sein?


Ansonsten sollte ein "Select * from Test" dir ein recht ähnliches Ergebnis geben :D 
 

Ich vermute mal, dass jeder Tag zwischen den beiden Daten ausgewiesen werden soll. Also:

ID	Datum		Von		Bis
1	01.01.2000	01.01.2000	10.01.2000
1	02.01.2000	01.01.2000	10.01.2000
1	03.01.2000	01.01.2000	10.01.2000
1	04.01.2000	01.01.2000	10.01.2000
1	05.01.2000	01.01.2000	10.01.2000
1	06.01.2000	01.01.2000	10.01.2000
1	07.01.2000	01.01.2000	10.01.2000
1	08.01.2000	01.01.2000	10.01.2000
1	09.01.2000	01.01.2000	10.01.2000
1	10.01.2000	01.01.2000	10.01.2000

Sowas ist mit reinem SQL nicht möglich, da SQL auf der Menge arbeitet, die in der Datenbank stehen. Du willst hier aber neue Zeilen dazudichten. Sowas würde höchstens mit einer Stored Procedure gehen. Ich kenne mich aber mit MS SQL nicht wirklich gut aus und weiß auch nicht, was man dort für Stored Procedure bauen könnte. Mit Oracles PL/SQL wäre es möglich.

Link zu diesem Kommentar
Auf anderen Seiten teilen

Man kann sich als Hilfe eine Tabelle mit allen Tagen aus den umliegenden Jahren anlegen und auf diese dann joinen um die zusätzlichen Zeilen zu bekommen.

Oder man erstellt sich die Tabelle virtuell per subquery, da weiß ich aber auch nicht welche Möglichkeiten es bei MSSQL gibt.

 

Ist eigentlich klar, dass 01.12. nach dem 02.02. kommt?

Link zu diesem Kommentar
Auf anderen Seiten teilen

@Whiz-zarD

Deine Vermutung ist korrekt. Ja das mit der Stored Procedure hatte ich mir schon angesehen.

Vom Prinzip her würde das so aussehen:

DECLARE @Datum1 DATE, @Datum2 DATE
SET @Datum1 = '20180301'
SET @Datum2 = '20180330'

SELECT DATEADD(DAY,number+1,@Datum1) [Date]
FROM master..spt_values
WHERE type = 'P'
AND DATEADD(DAY,number+1,@Datum1) < @Datum2

Das Problem ist nur, das ich hier Parameter angeben muss Datum1 und Datum2.

vor 14 Stunden schrieb PVoss:

Ist eigentlich klar, dass 01.12. nach dem 02.02. kommt?

... ups, beim letzteren sollte 2019 stehen...

vor 34 Minuten schrieb Enno:

Ist die Vermutung von @Whiz-zarD richtig?

Dann geht es z.B. mit einer While Schleife:

@x=0

while (select datumvon + X from tabelle) <= select datumbis from tabelle

begin

{

do something

x++

}

End

 

Ja MS-SQL kann Schleifen. :)

Ich werde mir das mal ansehen.

Ich habe das Problem nun anders gelöst. Die bestehende Webanwendung die das gesuchte Ergebnis darstellen sollte bietete fertige Elemente, wo einfach die SQL-Abfrage hinterlegt werden kann, deshalb war ich auf der Suche nach dieser SQL-Abfrage. In dieser Webanwendung habe ich auch die Möglichkeit mit JavaScript zu arbeiten. Deshalb hole ich mir derzeit nur einen Datensatz aus der Tabelle "Test", den ich dann entsprechend mit JavaScript aufbereite.

Link zu diesem Kommentar
Auf anderen Seiten teilen

vor 16 Minuten schrieb murat1895:

@Whiz-zarD

Deine Vermutung ist korrekt. Ja das mit der Stored Procedure hatte ich mir schon angesehen.

Vom Prinzip her würde das so aussehen:


DECLARE @Datum1 DATE, @Datum2 DATE
SET @Datum1 = '20180301'
SET @Datum2 = '20180330'

SELECT DATEADD(DAY,number+1,@Datum1) [Date]
FROM master..spt_values
WHERE type = 'P'
AND DATEADD(DAY,number+1,@Datum1) < @Datum2

Das Problem ist nur, das ich hier Parameter angeben muss Datum1 und Datum2.

Wie gesagt, ich kenne mich mit MS SQL nicht aus, da ich hauptsächlich mit Oracle Database zu tun habe. Dort gibt es die sog. Table Functions. Also eine Funktion, in der du Parameter reinreichen kannst und dir eine Tabelle zurückliefert. Unter MS SQL scheint sowas unter dem Begriff "Table-Valued Functions" zu geben.

https://www.codeproject.com/Articles/167399/Using-Table-Valued-Functions-in-SQL-Server

 

Link zu diesem Kommentar
Auf anderen Seiten teilen

Dein Kommentar

Du kannst jetzt schreiben und Dich später registrieren. Wenn Du ein Konto hast, melde Dich jetzt an, um unter Deinem Benutzernamen zu schreiben.

Gast
Auf dieses Thema antworten...

×   Du hast formatierten Text eingefügt.   Formatierung wiederherstellen

  Nur 75 Emojis sind erlaubt.

×   Dein Link wurde automatisch eingebettet.   Einbetten rückgängig machen und als Link darstellen

×   Dein vorheriger Inhalt wurde wiederhergestellt.   Editor leeren

×   Du kannst Bilder nicht direkt einfügen. Lade Bilder hoch oder lade sie von einer URL.

Fachinformatiker.de, 2024 by SE Internet Services

fidelogo_small.png

Schicke uns eine Nachricht!

Fachinformatiker.de ist die größte IT-Community
rund um Ausbildung, Job, Weiterbildung für IT-Fachkräfte.

Fachinformatiker.de App

Download on the App Store
Get it on Google Play

Kontakt

Hier werben?
Oder sende eine E-Mail an

Social media u. feeds

Jobboard für Fachinformatiker und IT-Fachkräfte

×
×
  • Neu erstellen...