# ACCESS Abfrage aber mit SELECT IF



## rainair (14. August 2008)

Hallo,
ich bastel grad an ner vereinfachten Darstellung für Buchungssätze. Derzeit werden Sie so dargestellt:

+------+-------------+-----------------------+---------------------+-------------------+--------------------+
| id    | kto_buch | gegenkto_buch | angespr_kto1 | angespr_kto2 | sollhaben_kz |
+------+--------------+----------------------+---------------------+-------------------+--------------------+
|    1  | 1400       | 8400                | 10203            | 1776             | S                  |
+------+------------- +----------------------+---------------------+-------------------+--------------------+


Die Darstellung soll wie folgt sein:

im Falle (sollhaben_kz = S)
----SOLL---------|---HABEN
kto_buch        |   gegenkto_buch
angespr_kto1  |   angespr_kto2


im Falle (sollhaben_kz = H)

----SOLL---------------|---HABEN
gegenkto_buch     |   kto_buch
angespr_kto2        |   angespr_kto1


In mySQL hätte ich das mit einer SELECT IF-Abfrage und einer UNION gemacht. Aber Access mag das scheinbar nicht. Wer weiß wie das sonst geht?

danke
rainer


----------



## rainair (14. August 2008)

Hallo nochmal,

ich hab jetzt nach langer Bastelei das ganz in MySQL zum Laufen gekriegt aber und zwar so:

SELECT if(sollhaben_kz= 'S', kto_buch, gegenkto_buch) as SOLL,
(SELECT if(sollhaben_kz= 'H', kto_buch, gegenkto_buch ))as HABEN, id  FROM access
UNION SELECT if(sollhaben_kz= 'S', angespr_kto1, angespr_kto2) as SOLL,
(SELECT if(sollhaben_kz= 'H', angespr_kto1, angespr_kto2 )) as HABEN, id 
FROM access order by 1;

aber bei der Umsetzung in das Access-SQL hab ich richtige Probleme. Könnt das jemand dolmetschen? :suspekt:


----------



## tecla (18. August 2008)

Hallo Rainair
Soviel ich weiss heissts in Access nicht if sondern iif.
Grüsse, Tecla


----------



## rainair (19. August 2008)

Hi Tecla,

gute Idee, sowas kann glaub ich nur MS produzieren, also ein "IIF".... Da wär ich so schnell net drauf gekommen.

Also mittlerweilen bin ich soweit:

SELECT IIF(lnx_fi_buchungen.sollhaben_kz='S', lnx_fi_buchungen.kto_buch, lnx_fi_buchungen.gegenkto_buch) AS SOLL,
(SELECT IIF(lnx_fi_buchungen.sollhaben_kz='H', lnx_fi_buchungen.kto_buch, lnx_fi_buchungen.gegenkto_buch)) AS HABEN, id FROM lnx_fi_buchungen
UNION SELECT IIF(lnx_fi_buchungen.sollhaben_kz='S', lnx_fi_buchungen.angespr_kto1, lnx_fi_buchungen.angespr_kto2) AS SOLL,
(SELECT IIF(lnx_fi_buchungen.sollhaben_kz='H', lnx_fi_buchungen.angespr_kto1, lnx_fi_buchungen.angespr_kto2)) AS HABEN, id FROM lnx_fi_buchungen;

Allerdings bekomme ich immer eine Fehlermeldung von ACCESS über einen Syntaxfehler.
Ich hab natürlich die korrekte Schreibweise des IIF auch geprüft
IIF(Bedingung, truepart, falsepart)

Kann es sein, dass ACCESS ein Problem mit verschachtelten Abfragen oder so hat? Hab natürlich auch in vielen anderen Foren darüber Infos gesucht, aber da hab ich nichts gegenteiliges gefunden. Was ist an meiner Syntax dann so falsch?
Wahrscheinlich hab nich nur Tomaten auf den Augen

Rainair


----------



## tecla (19. August 2008)

Morgen Rainair

brauchts denn die Verschachtelung überhaupt? Wie siehts denn so aus:

SELECT 
IIF(lnx_fi_buchungen.sollhaben_kz='S', lnx_fi_buchungen.kto_buch, Inx_fi_buchungen.gegenkto_buch) AS SOLL,
IIF(lnx_fi_buchungen.sollhaben_kz='H', lnx_fi_buchungen.kto_buch, lnx_fi_buchungen.gegenkto_buch) AS HABEN, 
id FROM lnx_fi_buchungen
UNION 
SELECT IIF(lnx_fi_buchungen.sollhaben_kz='S', lnx_fi_buchungen.angespr_kto1, lnx_fi_buchungen.angespr_kto2) AS SOLL,
IIF(lnx_fi_buchungen.sollhaben_kz='H', lnx_fi_buchungen.angespr_kto1, lnx_fi_buchungen.angespr_kto2) AS HABEN, id FROM lnx_fi_buchungen;

Grüsse, Tecla


----------



## rainair (19. August 2008)

wow super, ich bin begeistert. Endlich keine Fehlermeldung mehr! Ganz dickes Dankeschön Tecla
Des war zu einfach, drum bin ich nicht drauf gekommen ;-) 



ABER

Access verlangt jetzt Parameterwerte für 3 verschiedene Attribute:
Inx_fi_buchungen.gegenkto_buch, lnx_fi_buchungen.angespr_kto1 und lnx_fi_buchungen.angespr_kto2.

Ich verstehs allerdings nicht warum, denn die Tabelle ist (mit Ausnahme von angespr_kto2) mit Werten gefüllt. Lediglich bei letzterem kann es vorkommen, dass entweder kein oder ein Konto drinsteht.
Jetzt hab ich in dem IIF nochmal eine IIF-Überprüfung eingebaut, die mir abprüft, ob es sich bei dem einzutragenden Wert um 0 oder NULL handelt.... um das Problem zu umgehen. Aber damit ts leider auch net.

Ach ja, das ResultSet mit Deinem SELECT sah so aus, dass die erste Zeile immer leer Attribute brachte, die zweite befüllte, die dritte wieder leere, die vierte wieder befüllte.

Damit darin Werte stehen, sollte ich eben beim Ausführen (lt. Access) die Parameterwerte eingeben. Diese sollte sich aber Access eigentlich ja aus der vorgegebenen Tabelle holen.

Also ich seh schon, ich bin ein absoluter Access-Depp... :-(


----------

