McKloony 10 Posted October 19, 2020 Report 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
zahni 588 Posted October 19, 2020 Report 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.
McKoony 0 Posted October 19, 2020 Report 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.
McKoony 0 Posted October 19, 2020 Report 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.
MDD 13 Posted October 19, 2020 Report 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
zahni 588 Posted October 19, 2020 Report 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.
NilsK 3,061 Posted October 20, 2020 Report Posted October 20, 2020 Moin, ich werfe mal ISNULL() in die Runde. Gruß, Nils
zahni 588 Posted October 21, 2020 Report 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.
NilsK 3,061 Posted October 21, 2020 Report Posted October 21, 2020 Moin, ISNULL braucht auch kein IF und so. Scheint sich sehr zu ähneln. Gruß, Nils
zahni 588 Posted October 21, 2020 Report 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
NilsK 3,061 Posted October 22, 2020 Report 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
Recommended Posts
Create an account or sign in to comment
You need to be a member in order to leave a comment
Create an account
Sign up for a new account in our community. It's easy!
Register a new accountSign in
Already have an account? Sign in here.
Sign In Now