68863

ACCESS 2007 DECODE oder vergleichbare Funktion

Hallo,

in ORACLE SQL gab bzw gibt es die Funktion DECODE, mit der man entsprechend der IF-THEN-ELSE Logik bedingte Abfragen aus einer Tabelle erstellen kann. Das selbe habe mit einer Access 2007 Datenbank ausprobiert, leider mit wenig erfolg da Access die Funktion DECODE nicht kennt. Weiss jemand ob es eine Vergleichbare Funktion gibt?
Auf Facebook teilen
Auf X (Twitter) teilen
Auf Reddit teilen
Auf Linkedin teilen

Content-ID: 95436

Url: https://administrator.de/forum/access-2007-decode-oder-vergleichbare-funktion-95436.html

Ausgedruckt am: 29.04.2025 um 02:04 Uhr

Biber
Biber 28.08.2008 um 00:10:04 Uhr
Goto Top
Moin ABC123,

willkommen im Forum.

die M$Access-Funktionalität, die wohl der DECODE-Funktion am nächsten kommt, ist nicht etwa diese grottige IIF()-Verirrung, sondern die switch()-Funktion.
Diese ist allerdings (außer in meinen Memoiren) vermutlich nur in irgendwelchen Redmonder Praktikanten-Monatsberichten dokumentiert.
Aber für die lausigste DB-Syntax-Dokumentation der südlichen Quadranten dieses Spiralarms der Galaxis ist Access ja bekannt.

Deshalb schnell zwei kurze nachvollziehbare Beispiele:
PARAMETERS Stichtag DateTime;
select 
switch(m.type=1,"Tabelle",  
           m.type= 5,"Abfrage",  
           m.type= -32768 ,"Formular",  
           m.type=-32766,"Makro",  
           m.type=-32764, "Bericht",  
           m.type=-32761, "Modul",  
           m.Type=2,"MSysDb",  
           m.type=3,"Container",  
           m.type=4,"ODBC-verknüpfte Tabelle",  
                               true, "Exotisches") as Objekttyp,  
 m.Name, m.Type, m.flags, m.DateCreate AS angelegt, m.DateUpdate AS geandert
FROM MSysObjects AS m
WHERE (m.DateUpdate>=[stichtag])
order by 1
Diese (skizzierte) Abfrage listet alle DB-Objekte auf, die seit einem einzugebenen Stichtag geändert worden sind.
Die SWITCH()-Funktion verwende ich hier exakt so, wie ich auch die DECODE-Funktion benutzen würde, inklusive des DEFAULT-Falls.
Zweiter Haken (neben der fehlenden Dokumentation): der SWITCH-Funktion geht relativ schnell die Puste aus... nach ein paar albernen Fallunterscheidungen meldet ACCESS dann "Ausdruck zu komplex" oder ähnliche Hilflosigkeitsbekundungen.
In diesem Fall musst Du dann SWITCH-Funktionen schachteln:
PARAMETERS Stichtag DateTime;
select 
switch(m.type=1,"Tabelle",  
           m.Type=2,"MSysDb",  
           m.type=3,"Container",  
           m.type=4,"ODBC-verknüpfte Tabelle",  
           m.type= 5,"Abfrage",  
           m.type= 6, "Jet-verknüpfte Tabelle",  
           m.type= 8,"Beziehung",     
           true, switch(m.type= -32768 ,"Formular",  
                               m.type=-32766,"Makro",  
                               m.type=-32764, "Bericht",  
                               m.type=-32761, "Modul",  
                               m.type=-32758,"Benutzer",  
                               m.type=-32757,"DB-Eigenschaft",  
                               m.Type=-32756, "Datenzugriffsseite",  
                               true, "Biber nich weiß")) as Objekttyp,  
 m.Name, m.Type, m.flags, m.DateCreate AS angelegt, m.DateUpdate AS geandert
FROM MSysObjects AS m
WHERE (m.DateUpdate>=[stichtag] And [....])
order by 1
[auf eine sinnvolle/praxisnahe WHERE-Clause hab ich hier verzichtet, is' nich unser Thema grade]

Grüße
Biber
68863
68863 28.08.2008 um 08:08:30 Uhr
Goto Top
Super vielen, vielen Dank.

Gruß

ABC123