Benutzer mit den meisten Antworten
Fehlende Datum in SQL_Tabelle ergänzen

Frage
-
Hallo Zusammen,
ich kenne mich nicht mit Sql_Pragrammierung. Ich habe eine Frage und hoffe, dass mir jemand weiterhelfen kann. Ich habe eine SQL Abfrage bekommen. Hierzu lierfert meine Sql Abfrage eine tabelle mit datum und Anzahl
Datum : Anzahl
2015-01-15 68
2015-01-16 44
2015-01-19 16
2015-01-20 98
2015-01-21 47
2015-01-22 50
2015-01-21 1
Wie kann ich meiner SQL_Abfrage ergänzen, damit die fehlende datum(hier ZB: 2015-01-17 und 2015-01-18 ) eingefügt werden und mit 0 ausfüllen.
so habe ich die Sql Abfrage bekommenUSE BarForce SELECT CONVERT(date, ProductionDate) AS Datum, COUNT(CONVERT(date, ProductionDate)) As Anzahl FROM Slitte WHERE ProductionDate IS NOT NULL GROUP BY CONVERT(date, ProductionDate) ORDER BY CONVERT(date, ProductionDate)
Dake für eure Hilfe
- Bearbeitet Matsak Freitag, 23. Januar 2015 10:46
Antworten
-
Hallo,
wie Andreas schon schrieb, brauchst Du eine Tabelle mit allen benötigten Datumswerten, am besten persistiert, ansonsten kann man auch per CTE = Common Table Expression diese Daten on-the fly erzeugen, Beispiel:
;with dates as (SELECT CONVERT(date, '2015-01-01', 120) AS Datum UNION ALL SELECT DATEADD(day, 1, Datum) AS Datum FROM dates WHERE Datum < CONVERT(date, '2015-12-31', 120)) , deineDaten as ( SELECT CONVERT(date, '2015-01-15') AS Datum, 68 AS Anzahl UNION ALL SELECT CONVERT(date, '2015-01-16'), 44 UNION ALL SELECT CONVERT(date, '2015-01-19'), 16 UNION ALL SELECT CONVERT(date, '2015-01-20'), 98 UNION ALL SELECT CONVERT(date, '2015-01-21'), 47 UNION ALL SELECT CONVERT(date, '2015-01-22'), 50 UNION ALL SELECT CONVERT(date, '2015-01-21'), 1) SELECT dates.Datum, ISNULL(deineDaten.Anzahl, 0) AS Anzahl FROM dates LEFT JOIN deineDaten ON dates.Datum = deineDaten.Datum OPTION (Maxrecursion 366)
Liefert
Datum Anzahl 2015-01-01 0 2015-01-02 0 2015-01-03 0 2015-01-04 0 2015-01-05 0 2015-01-06 0 2015-01-07 0 2015-01-08 0 2015-01-09 0 2015-01-10 0 2015-01-11 0 2015-01-12 0 2015-01-13 0 2015-01-14 0 2015-01-15 68 2015-01-16 44 2015-01-17 0 2015-01-18 0 2015-01-19 16 2015-01-20 98 2015-01-21 47
Olaf Helper
[ Blog] [ Xing] [ MVP]- Als Antwort markiert Matsak Montag, 26. Januar 2015 08:34
Alle Antworten
-
Hallo
am einfachsten macht sich soetwas mithilfe einer Datumstabelle, wie man sie in praktisch allen Datawarehouses hat.
Wenn es so eine noch nicht gibt, würde ich mir jetzt eine solche anlegen - man kann diese immer wieder mal gebrauchen.
Dann ist es ein simples Left Outer Join. :)
Andreas Wolter (Blog | Twitter)
MCSM: Microsoft Certified Solutions Master Data Platform, MCM, MVP
www.SarpedonQualityLab.com | www.SQL-Server-Master-Class.com- Als Antwort vorgeschlagen Olaf HelperMVP Samstag, 24. Januar 2015 09:10
-
Hallo,
wie Andreas schon schrieb, brauchst Du eine Tabelle mit allen benötigten Datumswerten, am besten persistiert, ansonsten kann man auch per CTE = Common Table Expression diese Daten on-the fly erzeugen, Beispiel:
;with dates as (SELECT CONVERT(date, '2015-01-01', 120) AS Datum UNION ALL SELECT DATEADD(day, 1, Datum) AS Datum FROM dates WHERE Datum < CONVERT(date, '2015-12-31', 120)) , deineDaten as ( SELECT CONVERT(date, '2015-01-15') AS Datum, 68 AS Anzahl UNION ALL SELECT CONVERT(date, '2015-01-16'), 44 UNION ALL SELECT CONVERT(date, '2015-01-19'), 16 UNION ALL SELECT CONVERT(date, '2015-01-20'), 98 UNION ALL SELECT CONVERT(date, '2015-01-21'), 47 UNION ALL SELECT CONVERT(date, '2015-01-22'), 50 UNION ALL SELECT CONVERT(date, '2015-01-21'), 1) SELECT dates.Datum, ISNULL(deineDaten.Anzahl, 0) AS Anzahl FROM dates LEFT JOIN deineDaten ON dates.Datum = deineDaten.Datum OPTION (Maxrecursion 366)
Liefert
Datum Anzahl 2015-01-01 0 2015-01-02 0 2015-01-03 0 2015-01-04 0 2015-01-05 0 2015-01-06 0 2015-01-07 0 2015-01-08 0 2015-01-09 0 2015-01-10 0 2015-01-11 0 2015-01-12 0 2015-01-13 0 2015-01-14 0 2015-01-15 68 2015-01-16 44 2015-01-17 0 2015-01-18 0 2015-01-19 16 2015-01-20 98 2015-01-21 47
Olaf Helper
[ Blog] [ Xing] [ MVP]- Als Antwort markiert Matsak Montag, 26. Januar 2015 08:34