McKloony 10 Geschrieben 19. Oktober 2020 Melden Teilen Geschrieben 19. Oktober 2020 (bearbeitet) Ich versuche ein View auf eine Tabelle zu erstellen, die mehrere Felder enthält, die aber nicht immer einen Wert enthalten. Der Inhalt einiger Felder ist dann NULL. Hier ein Beispiel: Feld1 Feld2 Feld3 Feld4 Wert Null Wert Wert Null Null Wert Null Wert Wert Null Wert Mein Ziel die Werte aller Felder in einem neuen Feld des Views ausgeben zu lassen. Feld1 + ' ' + Feld + ' ' + Feld3 + ' ' + Feld4 As Neufeld funktioniert leider nur insoweit, dass nur dann etwas angezeigt wird, wenn alle vier Felder einen Wert enthlaten. CASE WHEN Feld1 IS NOT NULL THEN Feld1 + ' ' + CASE WHEN Feld2 IS NOT NULL THEN Feld2 + ' ' + CASE WHEN Feld3 IS NOT NULL THEN Feld3 Funktioniert auch nur dann, wenn alle Felder einen Wert enthalten. Weiß jemand eine Lösung? bearbeitet 19. Oktober 2020 von McKloony Zitieren Link zu diesem Kommentar
zahni 554 Geschrieben 19. Oktober 2020 Melden Teilen Geschrieben 19. Oktober 2020 Die Funktion https://docs.microsoft.com/de-de/sql/t-sql/language-elements/coalesce-transact-sql?view=sql-server-ver15 ist Dein Freund. Hier kannst Du für NULL einen anderen Default-Wert ausgeben. Zitieren Link zu diesem Kommentar
McKoony 0 Geschrieben 19. Oktober 2020 Melden Teilen Geschrieben 19. Oktober 2020 COALESCE (Feld1; Feld2; Feld3; Feld4) gibt leider immer nur willkürlich einen Wert aus dem jeweiligen Datensatz zurück, ich kann noch nicht einmal sagen welchen. Zitieren Link zu diesem Kommentar
McKoony 0 Geschrieben 19. Oktober 2020 Melden Teilen Geschrieben 19. Oktober 2020 vor 34 Minuten schrieb zahni: Die Funktion https://docs.microsoft.com/de-de/sql/t-sql/language-elements/coalesce-transact-sql?view=sql-server-ver15 ist Dein Freund. Hier kannst Du für NULL einen anderen Default-Wert ausgeben. COALESCE (Feld1; Feld2; Feld3; Feld4) gibt leider immer nur willkürlich einen Wert aus dem jeweiligen Datensatz zurück, ich kann noch nicht einmal sagen welchen. Zitieren Link zu diesem Kommentar
MDD 12 Geschrieben 19. Oktober 2020 Melden Teilen Geschrieben 19. Oktober 2020 (bearbeitet) vor 31 Minuten schrieb McKoony: COALESCE (Feld1; Feld2; Feld3; Feld4) gibt leider immer nur willkürlich einen Wert aus dem jeweiligen Datensatz zurück, ich kann noch nicht einmal sagen welchen. Willkürlich stimmt sich nicht! Die Werte werden der Reihe nach durchgegangen. Der erste der nicht NULL ist, wird zurückgegeben. Aber das scheint nicht dein Ziel zu sein. Wenn ich deine Anweisung richtig lese willst du die Werte entweder verknüpfen oder summieren, richtig? Vermutlich wirst du mit SELECT CONCAT(Feld1 + ' ', Feld2 + ' ', Feld3 + ' ', Feld4) dein Ziel erreichen bearbeitet 19. Oktober 2020 von MDD Zitieren Link zu diesem Kommentar
zahni 554 Geschrieben 19. Oktober 2020 Melden Teilen Geschrieben 19. Oktober 2020 Was steht denn in den Felder? String oder Zahl? concat (COALESCE (feld1,'')+(COALESCE (feld2,'0')) Prinzip klar? Mit (COALESCE (feld1,'Hanz Dampf') gibst du "Hans Dampf" aus, wenn die Spalte NULL ist. Zitieren Link zu diesem Kommentar
NilsK 2.934 Geschrieben 20. Oktober 2020 Melden Teilen Geschrieben 20. Oktober 2020 Moin, ich werfe mal ISNULL() in die Runde. Gruß, Nils Zitieren Link zu diesem Kommentar
zahni 554 Geschrieben 21. Oktober 2020 Melden Teilen Geschrieben 21. Oktober 2020 Am 20.10.2020 um 09:27 schrieb NilsK: Moin, ich werfe mal ISNULL() in die Runde. Gruß, Nils COALESCE ist eine Abart von ISNULL, die das Case-Gedöns einspart. Bei String-Operationen oder wenn man auf irgendwelchen Gründen kein NULL ausgeben möchte, ist eine große Hilfe. Zitieren Link zu diesem Kommentar
NilsK 2.934 Geschrieben 21. Oktober 2020 Melden Teilen Geschrieben 21. Oktober 2020 Moin, ISNULL braucht auch kein IF und so. Scheint sich sehr zu ähneln. Gruß, Nils Zitieren Link zu diesem Kommentar
zahni 554 Geschrieben 21. Oktober 2020 Melden Teilen Geschrieben 21. Oktober 2020 (bearbeitet) OK, ISNULL ist aber limitiert auf 2 Argumente. K.A. in welchem SQL-Standard die das geändert haben. Ich gucke mir immer was von meiner Kollegin ab, die echt schräge SQL-Funktionen im Schlaf beherrscht. DB2-Doku "The ISNULL function is identical to the COALESCE scalar function, except that ISNULL is limited to two arguments." Ach ja: COALESCE ist wohl ANSI-Standard und sollte daher immer gleich funktionieren: https://www.itprotoday.com/sql-server/coalesce-vs-isnull bearbeitet 21. Oktober 2020 von zahni Zitieren Link zu diesem Kommentar
NilsK 2.934 Geschrieben 22. Oktober 2020 Melden Teilen Geschrieben 22. Oktober 2020 Moin, gut, aber das ist ja gar kein Punkt, über den wir diskutieren müssten. Wichtiger wäre, ob der TO mit einer der Varianten (die im Prinzip ja identisch sind, wie wir jetzt herausgearbeitet haben) seinen Wunsch umsetzen kann. Falls nicht, wäre interessant, warum nicht, denn wir beide sind ja der Meinung, dass es damit passen müsste. Gruß, Nils Zitieren Link zu diesem Kommentar
Empfohlene Beiträge
Schreibe einen Kommentar
Du kannst jetzt antworten und Dich später registrieren. Falls Du bereits ein Mitglied bist, logge Dich jetzt ein.