McKloony 10 Geschrieben 19. Oktober 2020 Melden 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
zahni 587 Geschrieben 19. Oktober 2020 Melden 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.
McKoony 0 Geschrieben 19. Oktober 2020 Melden 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.
McKoony 0 Geschrieben 19. Oktober 2020 Melden 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.
MDD 13 Geschrieben 19. Oktober 2020 Melden 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
zahni 587 Geschrieben 19. Oktober 2020 Melden 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.
NilsK 3.045 Geschrieben 20. Oktober 2020 Melden Geschrieben 20. Oktober 2020 Moin, ich werfe mal ISNULL() in die Runde. Gruß, Nils
zahni 587 Geschrieben 21. Oktober 2020 Melden 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.
NilsK 3.045 Geschrieben 21. Oktober 2020 Melden Geschrieben 21. Oktober 2020 Moin, ISNULL braucht auch kein IF und so. Scheint sich sehr zu ähneln. Gruß, Nils
zahni 587 Geschrieben 21. Oktober 2020 Melden 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
NilsK 3.045 Geschrieben 22. Oktober 2020 Melden 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
Empfohlene Beiträge
Erstelle ein Benutzerkonto oder melde dich an, um zu kommentieren
Du musst ein Benutzerkonto haben, um einen Kommentar verfassen zu können
Benutzerkonto erstellen
Neues Benutzerkonto für unsere Community erstellen. Es ist einfach!
Neues Benutzerkonto erstellenAnmelden
Du hast bereits ein Benutzerkonto? Melde dich hier an.
Jetzt anmelden