Seite 1 von 1
Berechnung in Abfrage mit Parameter im Formular
Verfasst: Mo 16. Sep 2013, 17:09
von Herbert
Guten Tag
Ich versuchte ein Abfrage zu konstruieren, welche mir die Beträge der Mitglieder in einem bestimmten Zeitruam summiert und diese mit einem bestimmten Prozentsatz multipliziert. Als Parameterabfrage funktioniert diese.
Damit ich die Parameter im Formular eingeben kann, ersetzte ich
" WHERE "Service"."Datum" >=

atumvon AND "Service"."Datum" <=

atumbis GROUP BY "Mitglieder"."Name", "Mitglieder"."Prozente" "durch
" WHERE "Datumvon" >= IFNULL( ( SELECT "Datumvon" FROM "Filter" ), "Datumvon" ) AND "Datumbis" <= IFNULL( ( SELECT "Datumbis" FROM "Filter" ), "Datumbis" ) GROUP BY ... ".
Diese Aenderung wird jedoch nicht akzeptiert, sowohl in der grafischen Ansicht noch im SQL-Modus.
Danke für Unterstützung.
Gruss Herbert
Re: Berechnung in Abfrage mit Parameter im Formular
Verfasst: Mo 16. Sep 2013, 20:40
von RobertG
Hallo Herbert,
da fehlen zu viele Informationen, um sagen zu können, wo eventuell ein Fehler liegt.
Was heißt "Die Änderung wird nicht akzeptiert". Da muss doch irgendeine Meldung auftauchen.
Du hast
Code: Alles auswählen
WHERE "Service"."Datum" >= :Datumvon AND "Service"."Datum" <= :Datumbis GROUP BY "Mitglieder"."Name", "Mitglieder"."Prozente"
ersetzt durch
Code: Alles auswählen
WHERE "Datumvon" >= IFNULL( ( SELECT "Datumvon" FROM "Filter" ), "Datumvon" ) AND "Datumbis" <= IFNULL( ( SELECT "Datumbis" FROM "Filter" ), "Datumbis" ) GROUP BY ...
(die Parameter scheinen übrigens im Text recht lustig ...)
Fehlt da nicht die Tabelle "Service"? Muss es nicht vielleicht heißen:
Code: Alles auswählen
WHERE "Service"."Datum" >= IFNULL( ( SELECT "Datumvon" FROM "Filter" ), "Service"."Datum" ) AND "Service"."Datum" <= IFNULL( ( SELECT "Datumbis" FROM "Filter" ), "Service"."Datum" ) GROUP BY ...
?
Gruß
Robert
Re: Berechnung in Abfrage mit Parameter im Formular
Verfasst: Mo 16. Sep 2013, 21:26
von Herbert
Hallo Robert
Hier die komplete SQL-Anweisung
SELECT "Mitglieder"."Name", SUM( "Service"."Beitrag" ), "Mitglieder"."Prozent", SUM( "Beitrag" * "Prozent" / 100 ) FROM { OJ "Servicio" RIGHT OUTER JOIN "Mitglieder" ON "Service"."Mitglied" = "Mitglieder"."ID" }
WHERE "Service"."Datum" >=

atumvon AND "Service"."Datum" <=

atumbis
GROUP BY "Mitglieder"."Name", "Mitglieder"."Prozent"
Bei dieser Anweisung kommt der Parameterdialog.
Ersetze ich WHERE wie ich es beschrieben kommt die Fehlermeldung "Die Daten können nicht heruntergeladen werden". Die gleiche Meldung kommt auch bei deinem Vorschlag.
Danke für deine Unterstützung.
Gruss Herbert
Re: Berechnung in Abfrage mit Parameter im Formular
Verfasst: Di 17. Sep 2013, 17:10
von RobertG
Hallo herbert,
Herbert hat geschrieben:
SELECT "Mitglieder"."Name", SUM( "Service"."Beitrag" ), "Mitglieder"."Prozent", SUM( "Beitrag" * "Prozent" / 100 ) FROM "Service" RIGHT JOIN "Mitglieder" ON "Service"."Mitglied" = "Mitglieder"."ID"
WHERE "Service"."Datum" >=

atumvon AND "Service"."Datum" <=

atumbis
GROUP BY "Mitglieder"."Name", "Mitglieder"."Prozent"
Die Abfrage funktioniert also ohne Probleme (habe das mit dem Join etwas für mich klarer gefasst).
Dir folgende Abfrage gibt ein Datum wieder?
Das heißt: Deine Filter-Datei enthält zwei Datumsfelder, die jeweils nur einen Datensatz enthalten?
Dann würde ich anschließend stückchenweise vorgehen:
Code: Alles auswählen
SELECT "Mitglieder"."Name", SUM( "Service"."Beitrag" ), "Mitglieder"."Prozent", SUM( "Beitrag" * "Prozent" / 100 ) FROM "Service" RIGHT JOIN "Mitglieder" ON "Service"."Mitglied" = "Mitglieder"."ID"
WHERE "Service"."Datum" >= (SELECT "Datumvon" FROM "Filter") AND "Service"."Datum" <= :Datumbis
GROUP BY "Mitglieder"."Name", "Mitglieder"."Prozent"
Dürfte nur dann gehen, wenn wirklich ein Datum in der Tabelle "Filter" in "Datumvon" steht.
Ansonsten kannst Du auch die Datei (ohne entsprechende Daten) hier einmal anhängen oder mir per persönlicher Mail schicken ...
Gruß
Robert
Re: Berechnung in Abfrage mit Parameter im Formular
Verfasst: Mi 25. Sep 2013, 22:25
von Herbert
Hallo Robert
Deine Anweisung funktioniert super. Herzlichen Dank.
Gruss Herbert