Jump to content

Case When Abfrage


Der letzte Beitrag zu diesem Thema ist mehr als 180 Tage alt. Bitte erstelle einen neuen Beitrag zu Deiner Anfrage!

Recommended Posts

Posted (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 by McKloony
Posted (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 by MDD
Posted

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. 

Posted
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.

Posted (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 by zahni
Posted

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

 

Der letzte Beitrag zu diesem Thema ist mehr als 180 Tage alt. Bitte erstelle einen neuen Beitrag zu Deiner Anfrage!

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 account

Sign in

Already have an account? Sign in here.

Sign In Now
×
×
  • Create New...