# SELECT ... CASE : verschachteln



## klettermax (21. Juli 2005)

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!   

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


----------



## Nico Graichen (21. Juli 2005)

Hi, hab mit CASE noch nicht gearbeitet, aber hast du mal versucht, nach dem ELSE noch ein CASE zu schreiben?
 also:

```
,[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


----------



## andi_g69 (21. Juli 2005)

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


----------



## klettermax (21. Juli 2005)

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


----------

