Benutzer mit den meisten Antworten
SQL Query

Frage
-
Lieber DB Entwickler/in,
ich habe ne Query, der mir Folgendes aus gibt:
Tag stunde Angeboten 2017-04-01 08:00 3 2017-04-01 09:00 2 2017-04-01 10:00 5 2017-04-01 11:00 6 2017-04-01 12:00 7 ich würde gern den Query so umformen dass die summe von zeit von - bis mir aus gibt:
Tag stunde summe Angeboten 2017-04-01 08:00 - 09:00 5 2017-04-01 09:00 - -10:00 7 2017-04-01 10:00 - 11:00 11 2017-04-01 11:00 - 12:00 13 hat jemand ne Idee ?
Danke
Fabi
Antworten
-
Hallo Fabi,
das obige lässt einiges offen:
Wie wird der Fall behandelt, dass nicht jede Stunde Angebote gemacht werden?
Sind es immer genau Stunden (oder gibt es auch Minuten, Sekunden)?
Eine "naive" Lösung (mit einigermaßen aktueller SQL Server Version):
CREATE TABLE #Angebote ( Tag Date NOT NULL, Stunde Time NOT NULL, Anzahl int NOT NULL) INSERT INTO #Angebote(Tag, Stunde, Anzahl) VALUES ('2017-04-01', '08:00', 3), ('2017-04-01', '09:00', 2), ('2017-04-01', '10:00', 5), ('2017-04-01', '11:00', 6), ('2017-04-01', '12:00', 7); WITH AngebotePartition AS ( SELECT Tag, FIRST_VALUE(Stunde) OVER (PARTITION BY Tag ORDER BY Tag, Stunde ROWS BETWEEN CURRENT ROW AND 1 FOLLOWING) AS Anfang, LAST_VALUE(Stunde) OVER (PARTITION BY Tag ORDER BY Tag, Stunde ROWS BETWEEN CURRENT ROW AND 1 FOLLOWING) AS Ende, SUM(Anzahl) OVER (PARTITION BY Tag ORDER BY Tag, Stunde ROWS BETWEEN CURRENT ROW AND 1 FOLLOWING) AS AngeboteTotal FROM #Angebote ) SELECT Tag, FORMAT(Anfang, N'hh\:mm') + N' - ' + FORMAT(Ende, N'hh\:mm'), AngeboteTotal FROM AngebotePartition ORDER BY Tag, Anfang; GO DROP TABLE #Angebote;
Wenn die Rahmenbedingungen abweichen, müsste man einiges vorschalten, wie z. B. zusammenfassen nach Stunden, ggf. Einbindung einer Tabelle, die Bereiche vorgibt usw.
Gruß Elmar
- Als Antwort vorgeschlagen Ivan DragovMicrosoft contingent staff, Moderator Freitag, 28. April 2017 10:40
- Als Antwort markiert Dimitar DenkovMicrosoft contingent staff, Moderator Dienstag, 20. Juni 2017 08:20
-
moin moin stefan, hi Elmar,
danke für eure Schnelle Antwort.
Die Anforderung war anscheinend falsch. muss noch mit dem Report warten :-)
vielen Dank
Fabi
- Als Antwort vorgeschlagen Ivan DragovMicrosoft contingent staff, Moderator Montag, 24. April 2017 12:00
- Als Antwort markiert Ivan DragovMicrosoft contingent staff, Moderator Freitag, 28. April 2017 10:40
Alle Antworten
-
Hi,
poste bitte die Tabelle als CREATE TABLE Statement, Beispieldaten als INSERT INTO Statement und das auf den Beispieldaten erwünschte Ergebnis.
Deine SQL Abfrage, die die erste Ausgabe erzeugt, bitte auch.
Beschreibe auch genau, wie hier gruppiert werden soll. Denn ehrlich gesagt erschließt sich mir nicht, was Du da eigentlich im welcher Form summieren willst. Deine zweite Beispielausgabe ergibt für mich nicht sonderlich viel Sinn.
Gruß, Stefan
Microsoft MVP - Visual Developer ASP/ASP.NET
http://www.asp-solutions.de/ - Consulting, Development
http://www.aspnetzone.de/ - ASP.NET Zone, die ASP.NET Community
- Bearbeitet Stefan FalzModerator Freitag, 21. April 2017 09:25
-
Hallo Fabi,
das obige lässt einiges offen:
Wie wird der Fall behandelt, dass nicht jede Stunde Angebote gemacht werden?
Sind es immer genau Stunden (oder gibt es auch Minuten, Sekunden)?
Eine "naive" Lösung (mit einigermaßen aktueller SQL Server Version):
CREATE TABLE #Angebote ( Tag Date NOT NULL, Stunde Time NOT NULL, Anzahl int NOT NULL) INSERT INTO #Angebote(Tag, Stunde, Anzahl) VALUES ('2017-04-01', '08:00', 3), ('2017-04-01', '09:00', 2), ('2017-04-01', '10:00', 5), ('2017-04-01', '11:00', 6), ('2017-04-01', '12:00', 7); WITH AngebotePartition AS ( SELECT Tag, FIRST_VALUE(Stunde) OVER (PARTITION BY Tag ORDER BY Tag, Stunde ROWS BETWEEN CURRENT ROW AND 1 FOLLOWING) AS Anfang, LAST_VALUE(Stunde) OVER (PARTITION BY Tag ORDER BY Tag, Stunde ROWS BETWEEN CURRENT ROW AND 1 FOLLOWING) AS Ende, SUM(Anzahl) OVER (PARTITION BY Tag ORDER BY Tag, Stunde ROWS BETWEEN CURRENT ROW AND 1 FOLLOWING) AS AngeboteTotal FROM #Angebote ) SELECT Tag, FORMAT(Anfang, N'hh\:mm') + N' - ' + FORMAT(Ende, N'hh\:mm'), AngeboteTotal FROM AngebotePartition ORDER BY Tag, Anfang; GO DROP TABLE #Angebote;
Wenn die Rahmenbedingungen abweichen, müsste man einiges vorschalten, wie z. B. zusammenfassen nach Stunden, ggf. Einbindung einer Tabelle, die Bereiche vorgibt usw.
Gruß Elmar
- Als Antwort vorgeschlagen Ivan DragovMicrosoft contingent staff, Moderator Freitag, 28. April 2017 10:40
- Als Antwort markiert Dimitar DenkovMicrosoft contingent staff, Moderator Dienstag, 20. Juni 2017 08:20
-
moin moin stefan, hi Elmar,
danke für eure Schnelle Antwort.
Die Anforderung war anscheinend falsch. muss noch mit dem Report warten :-)
vielen Dank
Fabi
- Als Antwort vorgeschlagen Ivan DragovMicrosoft contingent staff, Moderator Montag, 24. April 2017 12:00
- Als Antwort markiert Ivan DragovMicrosoft contingent staff, Moderator Freitag, 28. April 2017 10:40