Ist es möglich, Sie zu ignorieren NULL-Werte, wenn mit LAG() und LEAD () - Funktionen in SQL Server?
Wie Sie wissen, die LAG() & BLEI - () Analyse-Funktionen Zugriff auf Daten aus einer vorherigen und nächsten Zeile das gleiche Ergebnis ohne die Verwendung von einen self-join. Aber ist es möglich, Sie zu ignorieren NULL-Werte bis zum Zugang zu einer NICHT-NULL-Wert?
Du musst angemeldet sein, um einen Kommentar abzugeben.
Seine möglich mit Fenster-Funktionen.
Haben, Lesen Sie dieses Artikel von Itzik Ben-Gan für weitere details.
In den folgenden code, der cte ist immer den letzten NICHT-NULL-id-Wert, dann die nächste auswählen, wird die Spalte Wert. Dieses Beispiel verwendet LAG.
zB.
Oracle 11 unterstützt die option
ignore nulls
die genau das tut, was Sie wollen. Natürlich ist Ihre Frage zu SQL-Server, aber manchmal ist es ermutigend zu wissen, dass die Funktion noch irgendwo existieren.Ist es möglich, eine Simulation dieser Funktionalität. Die Idee ist, zuordnen, null-Werte zu einer Gruppe, basierend auf den vorherigen Wert. Im wesentlichen ist dies das zählen der Anzahl der nicht-null-Werte vor es. Sie können dies tun, mit einer korrelierten Unterabfrage. Oder, noch interessanter, mit dem Unterschied der zwei Zeilen-Nummern. Dann innerhalb der Gruppe, können Sie einfach
max()
.Ich denke, die folgenden tut, was Sie wollen. Davon ausgehen, dass
col
enthältNULL
Werte undordering
hat die Reihenfolge der Zeilen:Den
lead()
ist ähnlich, aber die Reihenfolge ist vertauscht. Und, diese funktioniert mit zusätzlichen Partitionierung Tasten, aber Sie brauchen, um Sie hinzuzufügen, um alle Fenster Ausdrücke.col2
hättecol
ist, ist das argumentlag()
/lead()
.NULL
s für einelag()
1 (was sollte ich erwähnt haben in der Antwort). Wenn es nicht für Sie arbeiten, sollten Sie Bearbeiten Ihre Frage mit der Abfrage, die Sie versucht haben. Sie haben, um die Partitionierung Klauseln rechts auf den verschiedenen analytischen Funktionen.