Outer Apply und Cross Apply in SQL nutzen – NULL-Werte auffüllen
- Outer Apply und Cross Apply in SQL nutzen – Einleitung
- Outer Apply und Cross Apply in SQL nutzen – Die Datenmenge bauen
- Outer Apply und Cross Apply in SQL nutzen – NULL-Werte auffüllen
Schauen wir uns das Forward Filling an. Je nach Version des SQL Servers funktioniert eine Version oder leider nicht. 🙂
Mit SQL Server 2022 kann man den folgenden Code nutzen, um einen weiteren CTE zu bauen:
Filled AS ( SELECT ContNo, MonthEnd, Amount, last_value(Amount) IGNORE NULLS OVER ( PARTITION BY ContNo ORDER BY MonthEnd ROWS BETWEEN UNBOUNDED PRECEDING AND CURRENT ROW ) AS ForwardFilledAmount FROM Combined ) SELECT * FROM Filled |
Versionen von SQL Server vor 2022 unterstützen leider „ignore nulls“ nicht, hier kann man dann folgenden Code nutzen:
Filled AS ( SELECT c.ContNo, c.MonthEnd, c.Amount, ca.ForwardFilledAmount FROM Combined c OUTER APPLY ( SELECT TOP 1 Amount AS ForwardFilledAmount FROM Combined c2 WHERE c2.ContNo = c.ContNo AND c2.MonthEnd <= c.MonthEnd AND c2.Amount IS NOT NULL ORDER BY c2.MonthEnd DESC ) ca ) SELECT * FROM Filled |
OUTER APPLY funktioniert dabei so ähnlich wie ein LEFT JOIN. Der Unterschied besteht darin, dass beim OUTER APPLY die rechte Seite von der linken Seite abhängt. In einem weiteren Artikel zum Thema werde ich noch ein paar Beispiele dazu zeigen. CROSS APPLY ist ähnlich, hier ist es aber kein Äquivalent zum LEFT JOIN, sondern zum INNER JOIN. Auch dazu mehr in einem der weiteren Artikel.