
68863
27.08.2008, aktualisiert am 28.08.2008
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?
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?
Bitte markiere auch die Kommentare, die zur Lösung des Beitrags beigetragen haben
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
2 Kommentare
Neuester Kommentar
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:
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:
[auf eine sinnvolle/praxisnahe WHERE-Clause hab ich hier verzichtet, is' nich unser Thema grade]
Grüße
Biber
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
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
Grüße
Biber