Benutzer mit den meisten Antworten
NULL in Summenspalte ersetzen

Frage
-
Hallo,
ich habe folgendes Problem:
Ich habe zwei Tabellen a und b, die über einen PrimaryKey verknüpft sind. In der Sekundartabelle b gibt es u. a. eine Spalte mit Zahlenwerten, die ich addieren möchte. Leider gibt es nicht zu jedem Datensatz aus primären Tabelle a einen Datensatz in Tabelle b. Wenn ich die Tabellen in der Abfrage mit INNER JOIN verknüpfe, werden die Datensätze aus Tabelle a, zudenen es keinen in Tabelle b gibt, wegen NULL herausgefiltert. Verwende ich LEFT JOIN, sind die Felder/Spalten aus der Tabelle b NULL. Gibt es eine Möglichkeit dieses NULL durch eine 0 zu ersetzen? Beispielsweise in der Form
CASE tbl_b.Stunden WHEN NULL THEN 0 ELSE SUM(DISTINCT tbl_b.Stunden) END AS SumStunden
Vielen Dank im Voraus
Gruß
Norbert
Antworten
-
Hallo Norbert,
mit Deinem CASE WHEN Statement geht es auch, allerdings müsstest Du auf IS NULL prüfen, ein einfacher Vergleich auf = NULL geht nicht.
Noch einfacher geht es mit der ISNULL Funktion, hier kannst Du als 2ten Parameter den Substitutwert, also 0, angeben. Und wenn es noch etwas umfangreicher / flexibler und ANSI mäßig gehen soll, kannst Du die COALESCE Funktion verwenden; das liefert aus den X Werten den ersten NOT NULL Wert zurück:
SELECT ISNULL(NULL, 0); SELECT COALESCE(NULL, NULL, NULL, NULL, 0);
Olaf Helper
Blog Xing- Als Antwort markiert DevBiker01 Donnerstag, 10. Januar 2013 08:42
Alle Antworten
-
Hallo Norbert,
mit Deinem CASE WHEN Statement geht es auch, allerdings müsstest Du auf IS NULL prüfen, ein einfacher Vergleich auf = NULL geht nicht.
Noch einfacher geht es mit der ISNULL Funktion, hier kannst Du als 2ten Parameter den Substitutwert, also 0, angeben. Und wenn es noch etwas umfangreicher / flexibler und ANSI mäßig gehen soll, kannst Du die COALESCE Funktion verwenden; das liefert aus den X Werten den ersten NOT NULL Wert zurück:
SELECT ISNULL(NULL, 0); SELECT COALESCE(NULL, NULL, NULL, NULL, 0);
Olaf Helper
Blog Xing- Als Antwort markiert DevBiker01 Donnerstag, 10. Januar 2013 08:42