sql: wert "austauschen"
wo2001
- datenbank
hallo,
ich bin auf der suche nach einem access-sql-statement, das folgendes kann:
wenn in der selected column ein bestimmter wert steht, soll das ergebnis so aussehen, als stünde ein anderer wert drin,
also so:
select IF(feld="dies","das") as erg
dann erhalte ich "das" wenn im feld "dies" drinsteht.
kennt da jemand eine funktion?
danke schonmal :)
$sql2="update tabelle set wert='dies'where wert='das'";
langt dir das???
$sql2="update tabelle set wert='dies'where wert='das'";
langt dir das???
nope..sorry.
da hab ich mich blöd ausgedrückt :)
also der wert in der datenbank soll nicht verändert werden, sondern es ist so:
in der datenbank steht das datum auf drei felder verteilt, und danach muss sortiert werden..sowiet kein problem, aber der monat ist als string und auf deutsch eingetragen.
deshalb hätt ich gerne einen wert returned, der bei auswahl eines monats dessen "nummer" zurückgibt, damit ich nach dieser sortieren kann.
die werte / felder in der datenbank kann ich nicht ändern :(
$trans = array ("märz" => "3","januar" => "1", "mai" => "5");
$monatszahl = strtr($monat,$trans);
mit hilfe von php kannste es leicht ändern:-)
$trans = array ("märz" => "3","januar" => "1", "mai" => "5");
$monatszahl = strtr($monat,$trans);
mit hilfe von php kannste es leicht ändern:-)
hi nochmal, danke dir :)
ABER
das geht auch nicht :( weil man innerhalb eines sql-statements keinen zugriff auf variablen aus demselben statement hat, wenn man keine sql-funktion benutzt, so z b mit php. die variable "monat" ist leer, und ich bräucht es halt im sql . seufz..
Hallo,
das geht auch nicht :( weil man innerhalb eines sql-statements keinen zugriff auf variablen aus demselben statement hat, wenn man keine sql-funktion benutzt, so z b mit php. die variable "monat" ist leer, und ich bräucht es halt im sql . seufz..
Kannst Du in der DB noch eine Tabelle anlegen?
Die koennte dann wie folgt aussehen
Table: Schluessel
| Monatsname | Monatsnummer
| Januar | 1
| Februar | 2
usw.
und dann
select Schluessel.monatsnummer from Schluessel, Deine_Tabelle where Schluessel.Monatsname = Deine_Tabelle.Monatsname
wobei Du das select-Statement noch mit Deinen Sachen erweitern kannst/musst.
alternativ:
Kennt Access den UNION-Befehl (Oracle hat ihn, Mysql nicht)? Wenn ja, koenntest Du ein Statement in folgender Form machen:
select Deine_spalten, "1" as monatsnummer from Deine_Tabelle where Monat = "Januar"
UNION
select Deine_spalten, "2" as monatsnummer from Deine_Tabelle where Monat = "Februar"
UNION
select Deine_spalten, "3" as monatsnummer from Deine_Tabelle where Monat = "Maerz"
usw.
Das ist dann ein Performance-Monster, da Du effektiv 12 Selects machst, aber sollte funkionieren (wenn auch ungetestet).
Gruss
Thomas
hi,
okok ihr habt recht, ich mach eine 2te tabelle :)
also union kennt access net , soweit ich weiß, aber join ja hoffentlich *gr*
cu :)
Hallo,
also union kennt access net , soweit ich weiß, aber join ja hoffentlich *gr*
Warum das denn nicht?
Klar kenn Access Union-Abfragen genauso wie Pass-Through. Schau mal in die Online Hilfe.
Was Access nicht hat, ist ein Assistenten für Union und Pass-Through Abfrage - da ist Handarbeit gefragt.
Viele Grüße
Markus
Hallo,
zunächst denke ich mal, daß Du ein Design(Normalisierungs)problem hast. Eigentlich gehört da eine zweite Tabelle hin, dessen Key mit Deiner eigentlichen Tabelle verknüpft ist.
Nun gut, wenn Du vollen DB-Zugriff hast, könntest Du eine zweite Tabelle (z.B. Monat) definieren, mit zwei Datenfeldern:
MonatID = Datentyp Zahl/Byte
Monat = Datentyp String
Angenommen in Deiner Ursprungstabelle hat das fragliche Datenfeld den Feldnamen "Monat" und diese Tabelle heißt Tabelle1, sieht die SQL-Anweisung wie folgt aus:
SELECT Tabelle1.*
FROM Monat INNER JOIN Tabelle1 ON Monat.Monat = Tabelle1.Monat
ORDER BY Monat.MonatID;
Viele Grüße aus Köln
Markus
Hallo,
zunächst denke ich mal, daß Du ein Design(Normalisierungs)problem hast. Eigentlich gehört da eine zweite Tabelle hin, dessen Key mit Deiner eigentlichen Tabelle verknüpft ist.
Nun gut, wenn Du vollen DB-Zugriff hast, könntest Du eine zweite Tabelle (z.B. Monat) definieren, mit zwei Datenfeldern:
MonatID = Datentyp Zahl/Byte
Monat = Datentyp String
Angenommen in Deiner Ursprungstabelle hat das fragliche Datenfeld den Feldnamen "Monat" und diese Tabelle heißt Tabelle1, sieht die SQL-Anweisung wie folgt aus:
SELECT Tabelle1.*
FROM Monat INNER JOIN Tabelle1 ON Monat.Monat = Tabelle1.Monat
ORDER BY Monat.MonatID;
Viele Grüße aus Köln
Markus
hi markus,
also nur um meine ehre zu wahren: ist net mein design *g*
danke für den tip--ich denk' so werd ich es wohl machen, dachte nur das könnte evtl eine funktion
auch grüße aus köln wo
Hallo!
normalisierung hin ... normalisierung her ...
select iif(x="das",x,"dies") funzt unter access.
Obs auch noch funzt, wenn man es via ADO aufruft kann ich nicht sagen.
<meinung mode="persoenlich">
Normalisierung ist eine feine Sache (steh total d'rauf) - Allerdings kommt es hin und wieder vor, dass es besser ist nicht zu normalisieren ...
</meinung>
lG fredy
hallo,
ich bin auf der suche nach einem access-sql-statement, das folgendes kann:
wenn in der selected column ein bestimmter wert steht, soll das ergebnis so aussehen, als stünde ein anderer wert drin,
also so:
select IF(feld="dies","das") as erg
dann erhalte ich "das" wenn im feld "dies" drinsteht.
kennt da jemand eine funktion?
danke schonmal :)