murat1895 Geschrieben 8. März 2018 Teilen Geschrieben 8. März 2018 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! Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
thereisnospace Geschrieben 8. März 2018 Teilen Geschrieben 8. März 2018 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 Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
Memento Geschrieben 8. März 2018 Teilen Geschrieben 8. März 2018 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.. Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
Whiz-zarD Geschrieben 8. März 2018 Teilen Geschrieben 8. März 2018 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 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. thereisnospace reagierte darauf 1 Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
JimTheLion Geschrieben 8. März 2018 Teilen Geschrieben 8. März 2018 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? Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
MartinSt Geschrieben 9. März 2018 Teilen Geschrieben 9. März 2018 vor 14 Stunden schrieb Whiz-zarD: Sowas ist mit reinem SQL nicht möglich, da SQL auf der Menge arbeitet, die in der Datenbank stehen. Das geht schon, wenn man sog. "Set Returning Functions" hat, z.B. generate_series bei PostgreSQL. Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
Enno Geschrieben 9. März 2018 Teilen Geschrieben 9. März 2018 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. Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
murat1895 Geschrieben 9. März 2018 Autor Teilen Geschrieben 9. März 2018 @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. Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
Whiz-zarD Geschrieben 9. März 2018 Teilen Geschrieben 9. März 2018 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 Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
Empfohlene Beiträge
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.