Fehlende Daten mit Nullwerten zwischen Datumsbereichen abrufen
Die ursprüngliche Abfrage hat Daten zwischen zwei Daten abgerufen, fehlende Daten jedoch ausgeschlossen. Um fehlende Daten einzubeziehen und den fehlenden Daten einen Nullwert zuzuweisen, können wir eine Technik namens „Datumskennzeichnung“ verwenden.
Kennzeichnung fehlender Daten
Eine rekursive gemeinsame Tabelle Ausdruck (CTE) kann verwendet werden, um eine Reihe von Datumsangaben innerhalb des angegebenen Bereichs zu generieren. Der CTE mit dem Namen d beginnt mit dem ersten Datum des Bereichs und fügt rekursiv einen Tag hinzu, bis er das Enddatum erreicht.
;with d(date) as ( select cast('10/01/2012' as datetime) union all select date+1 from d where date < '10/15/2012' )
Verknüpfen mit vorhandenen Daten
Als nächstes führen wir einen linken äußeren Join zwischen dem CTE d und der ursprünglichen Datentabelle temp (t) durch, um die vorhandenen Daten für jedes Datum abzurufen. Wenn in temp ein Datum vorhanden ist, wird der Wert verwendet; Andernfalls ersetzen wir Null.
select t.ID, d.date CDate, isnull(t.val, 0) val from d left join temp t on t.CDate = d.date order by d.date OPTION (MAXRECURSION 0) -- use this if your dates are >99 days apart
Hinweis zu MAXRECURSION
Die Klausel OPTION (MAXRECURSION 0) verhindert, dass die Abfrage aufgrund übermäßiger Rekursion im Datumsbereich fehlschlägt ist zu groß. Sie können den Wert an Ihren spezifischen Datenbereich anpassen.
Mit dieser Technik können wir alle Daten zwischen zwei Daten abrufen, einschließlich fehlender Daten, und gleichzeitig sicherstellen, dass die fehlenden Werte als Null dargestellt werden.
Das obige ist der detaillierte Inhalt vonWie fülle ich fehlende Daten mit Nullwerten in SQL-Abfragen?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!