68863
Aug 27, 2008, updated at Aug 28, 2008 (UTC)
8482
2
0
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?
Please also mark the comments that contributed to the solution of the article
Content-Key: 95436
Url: https://administrator.de/contentid/95436
Printed on: April 26, 2024 at 17:04 o'clock
2 Comments
Latest comment
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