none
NULL in Summenspalte ersetzen RRS feed

  • 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

    Mittwoch, 9. Januar 2013 17:16

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
    Mittwoch, 9. Januar 2013 17:27

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
    Mittwoch, 9. Januar 2013 17:27
  • Hallo Olaf,

    danke für die Antwort; hat funktioniert.

    Gruß

    Norbert

    Donnerstag, 10. Januar 2013 08:33