McKloony 10 Posted October 19, 2020 Report Share Posted October 19, 2020 (edited) 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? Edited October 19, 2020 by McKloony Quote Link to post
zahni 290 Posted October 19, 2020 Report Share Posted October 19, 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. Quote Link to post
McKoony 0 Posted October 19, 2020 Report Share Posted October 19, 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. Quote Link to post
McKoony 0 Posted October 19, 2020 Report Share Posted October 19, 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. Quote Link to post
MDD 3 Posted October 19, 2020 Report Share Posted October 19, 2020 (edited) 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 Edited October 19, 2020 by MDD Quote Link to post
zahni 290 Posted October 19, 2020 Report Share Posted October 19, 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. Quote Link to post
NilsK 1,220 Posted October 20, 2020 Report Share Posted October 20, 2020 Moin, ich werfe mal ISNULL() in die Runde. Gruß, Nils Quote Link to post
zahni 290 Posted October 21, 2020 Report Share Posted October 21, 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. Quote Link to post
NilsK 1,220 Posted October 21, 2020 Report Share Posted October 21, 2020 Moin, ISNULL braucht auch kein IF und so. Scheint sich sehr zu ähneln. Gruß, Nils Quote Link to post
zahni 290 Posted October 21, 2020 Report Share Posted October 21, 2020 (edited) 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 Edited October 21, 2020 by zahni Quote Link to post
NilsK 1,220 Posted October 22, 2020 Report Share Posted October 22, 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 Quote Link to post
Recommended Posts
Join the conversation
You can post now and register later. If you have an account, sign in now to post with your account.