Neuigkeiten:

Wenn ihr euch für eine gute Antwort bedanken möchtet, im entsprechenden Posting einfach den Knopf "sag Danke" drücken!

Mobiles Hauptmenü

MySQL Control Flow Functions in Access

Begonnen von Dirk, September 18, 2005, 12:03:34

⏪ vorheriges - nächstes ⏩

Dirk

hi leute,

in mysql bin ich recht fit,
aber access ist neu für mich.

ich würde gern das CASE konstrukt
aus mysql in access nutzen. das scheint
es da nicht zu geben. wie ist dafür die
alternative syntax?

bzw. mal allgemein: gibt es irgendwo eine
übersicht über die in access verfügbar sql?

vielen dank für eure tipps.


Hondo

Hallo,
T-SQL welches u.a. von MySQL verwendet wird kann man bei solchen Spezialfällen imo nicht auf Access ummünzen.
Erkläre dein Problem, was du machen möchtest etc und wir helfen dir bei der Suche nach Alternativen.

Gruß Andreas

Dirk

ok, vielen dank schon mal.

es geht um eine artikel-db für einen shop.

die auszulesende tabelle enthält artikelname, kategoriename usw.

einige kategorienamen sollen umbenannt werden
also SELECT WHEN katname='a' THEN katname='b' ELSE katname AS ...

mh, weiß nicht, ob das jetzt verständlich war ;-)

Hondo

#3
Hallo,
mach eine Select/Case Schleife, bestimme die einzelnen Werte wie Feldname, neuer Feldname etc, baue dir daraus resultierend ein SQL-Statement zusammen und führe dies aus.
BTW, Feldnamen kannst du mit Select nicht ändern, sondern mit Alter Table...

Gruß Andreas

PS: imo macht es keinen Sinn die Feldnamen in einer Tabelle während der Laufzeit zu ändern. Ich mutmaße dass an deinem Datenbankkonzept was falsch ist.

Dirk

ah, uuh, nee. ich verstehs ni.

eine select case abfrage würd ich ja gern machen:
SELECT
ARTIKEL1 AS KURZNAME,
(CASE WHEN GRUPPE1 ='Displays' THEN 'Monitore' ELSE GRUPPE1 END) as KATEGORIE_NAME
FROM bla


aber da erhalte ich den fehler:
syntaxfehler (fehlender operator) in abfrageausdruck ...

und das war auch falsch rübergekommen,
ich möchte nicht den feldnamen ändern,
sondern lediglich den inhalt

Hondo

Hallo,
du weisst doch vor dem Abschicken welche Felder umbenannt werden sollen und wie sie umbenannt werden sollen - oder?
BTW: erkläre doch mal was dies für ein Sinn machen soll?

Andreas

Dirk

ja, die bedingungen stehen fest und ändern sich auch nicht.

sinn macht das, da aus der großhändler-db die artikel
für den eigenen webshop geholt werden - und dabei
sollen halt einige artikel in andere kategorien gesteckt
werden.

Hondo

Hallo,
Zitatund dabei sollen halt einige artikel in andere kategorien gesteckt werden.
Ja das ist jetzt klarer um was es geht.
Du musst für jede Kategorie folgendes ausführen:
Update Tabelle set kategorie = 'andereKategorieX' Where kategorie = 'kategorie1' AND sonstiges Kriterium
Update Tabelle set kategorie = 'andereKategorieY' Where kategorie = 'kategorie2' AND sonstiges Kriterium
Update Tabelle set kategorie = 'andereKategorieZ' Where kategorie = 'kategorie3' AND sonstiges Kriterium
...

Hast du nur wenige Kategorien die geändert werden müssen würde ich es so hard-coded machen.
Wie unterscheidest du bei welchen Artikel die Kategorie geändert werden soll?

Gruß Andreas

Dirk

die unterscheidung erfolgt rein nach kategoriename.
die variante mit dem update vorher käme als lösung
also in frage, obwohl es schon einige viele kategorien
betrifft. naja.

großen dank jedenfalls für deine hilfe!

jetzt hätte ich nur noch das problem, wie ich mehre
abfragen automatisch ablaufen lassen kann?!

Hondo

Wenn du weisst welche Kategorien es betrifft und welchen neuen Kategorienamen in Frage kommt kannst du dies in 2 Array schreiben und dann dieses in einer For-Schleife abarbeiten.

Dim arrAlt As Variant, arrNeu As Variant, i As Integer
arrAlt = Array("1","5","9","18")
arrNeu = Array("11","17","18","25")
For i = lbound(arrAlt) to ubound(arrAlt)
    Currentdb.Execute "Update Tabelle1 set kategorie  = " & arrNeu(i) & " Where kategorie = " & arrAlt(i)
Next i


Gruß Andreas

Dirk


imp666

SELECT
ARTIKEL1 AS KURZNAME,
(CASE WHEN GRUPPE1 ='Displays' THEN 'Monitore' ELSE GRUPPE1 END) as KATEGORIE_NAME
FROM bla


In Access gibt es in SQL eine ähnlich funktionale Syntax, ich würde es in Access evtl. so umsetzen:
SELECT IIF(GRUPPE1 ='Displays';'Monitore';GRUPPE1) AS gruppe FROM bla