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" >= :Datumvon AND "Service"."Datum" <= :Datumbis 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" >= :Datumvon AND "Service"."Datum" <= :Datumbis

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" >= :Datumvon AND "Service"."Datum" <= :Datumbis
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?

Code: Alles auswählen

SELECT "Datumvon" FROM "Filter"
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