Jump to content

Case When Abfrage


Recommended Posts

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
Link to post
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.

Link to post
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
Link to post
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.

Link to post

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
Link to post

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

 

Link to post

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.

Guest
Reply to this topic...

×   Pasted as rich text.   Paste as plain text instead

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.

×
×
  • Create New...