SELECT ... CASE : verschachteln

klettermax

Grünschnabel
Hallo liebe Programmierer!

Gerade habe ich dieses interessante Forum entdeckt, mich registriert und hoffe nun auf Hilfe:

In einer Datenbankabfrage möchte ich die Feldnamen vorformatieren.
Auszug:


SELECT [FIRMA] =
CASE
WHEN tbl1.FELD1 = 'Firma' THEN tbl2.NAME1
ELSE ''
END
,[ANR1] =
CASE
WHEN LEN( tbl2.NAME3 ) > 0 THEN tbl2.ANREDE + ' ' + tbl2.NAME3
ELSE tbl2.ANREDE+' ' +tbl2.VORNAME+' '+tbl2.NAME
END

... und so weiter

Das klappt auch alles ganz gut ... ABER nun meine Frage:

Kann man die CASE...ELSE...END Konstrukte auch weiter verschachteln?
Meine Versuche diesbezüglich waren leider erfolglos! :mad:

Beispiel:
um für das Anschriftenfeld einen eventuell vorhandenen akademischen Titel mit auszugegeben aber keine Leertaste zu erhalten, wenn keiner vorhanden ist habe ich folgendes versucht:
(Auszug)

,[ANR1] =
CASE
WHEN (LEN( tbl2.NAME3 ) > 0 AND LEN(tbl2.TITEL) >0)
THEN tbl2.ANREDE + ' ' + tbl2.TITEL + ' ' + tbl2.NAME3
ELSE
WHEN LEN(tbl2.NAME3) > 0
THEN tbl2.ANREDE + ' ' + tbl2.NAME3
ELSE
tbl2.ANREDE+' ' +tbl2.VORNAME+' '+tbl2.NAME
END

wie gesagt: leider ohne Erfolg, soll heissen, ich erhalte eine SQL-Fehlermeldung ("... an error near...")

Viele Grüße und schon mal DANKE für Hilfe
 
Hi, hab mit CASE noch nicht gearbeitet, aber hast du mal versucht, nach dem ELSE noch ein CASE zu schreiben?
also:
Code:
 ,[ANR1] =
CASE
WHEN (LEN( tbl2.NAME3 ) > 0 AND LEN(tbl2.TITEL) >0)
THEN tbl2.ANREDE + ' ' + tbl2.TITEL + ' ' + tbl2.NAME3
ELSE
CASE
WHEN LEN(tbl2.NAME3) > 0
THEN tbl2.ANREDE + ' ' + tbl2.NAME3
ELSE
tbl2.ANREDE+' ' +tbl2.VORNAME+' '+tbl2.NAME
END
höchstwahrscheinlich, musst du auch noch ein 2. END schreiben, also pro CASE ein END

Falls das nix bringt, poste bitte mal die komplette Fehlermeldung und nicht nur den kurzen Auszug (der ist nämlich nichtssagend ;) ) und wenn möglich auch dein das DBMS, was du nutzt
 
In welchem DBMS denn? Ist es MS SQL Server? Dann geht es so:

,[ANR1] =
CASE
WHEN (LEN( tbl2.NAME3 ) > 0 AND LEN(tbl2.TITEL) >0)
THEN tbl2.ANREDE + ' ' + tbl2.TITEL + ' ' + tbl2.NAME3
WHEN LEN(tbl2.NAME3) > 0
THEN tbl2.ANREDE + ' ' + tbl2.NAME3
ELSE tbl2.ANREDE+' ' +tbl2.VORNAME+' '+tbl2.NAME
END
 
Hallo andi_g69,

vielen Dank auch Dir für Deinen Hinweis.

Ich war nicht auf die Idee gekommen, einfach zwei WHENs hintereinander zu hängen.

that was it!

Viele Grüße

klettermax
 

Neue Beiträge

Zurück