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!

Empfohlene Beiträge

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 von McKloony
Link zu diesem Kommentar
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 zu diesem Kommentar
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 von MDD
Link zu diesem Kommentar

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 von zahni
Link zu diesem Kommentar

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 zu diesem Kommentar
Der letzte Beitrag zu diesem Thema ist mehr als 180 Tage alt. Bitte erstelle einen neuen Beitrag zu Deiner Anfrage!

Schreibe einen Kommentar

Du kannst jetzt antworten und Dich später registrieren. Falls Du bereits ein Mitglied bist, logge Dich jetzt ein.

Gast
Auf dieses Thema antworten...

×   Du hast formatierten Text eingefügt.   Formatierung jetzt entfernen

  Only 75 emoji are allowed.

×   Dein Link wurde automatisch eingebettet.   Einbetten rückgängig machen und als Link darstellen

×   Dein vorheriger Inhalt wurde wiederhergestellt.   Editor-Fenster leeren

×   Du kannst Bilder nicht direkt einfügen. Lade Bilder hoch oder lade sie von einer URL.

×
×
  • Neu erstellen...