Gelöst: Zusammenfass. von Abfrageerg. aus mehreren Tabellen

Antwort erstellen


BBCode ist eingeschaltet
[img] ist ausgeschaltet
[url] ist eingeschaltet
Smileys sind ausgeschaltet

Die letzten Beiträge des Themas
   

Ansicht erweitern Die letzten Beiträge des Themas: Gelöst: Zusammenfass. von Abfrageerg. aus mehreren Tabellen

Re: Zusammenfassung von Abfrageergebnissen aus mehreren Tabellen

von MEcki » Do, 26.08.2010 10:59

Ich glaube (hoffe), jetzt hab ich es wirklich.

Code: Alles auswählen

......
FROM "Mitglieder"
INNER JOIN "Kinder" ON "Mitglieder"."ID_Mitglied" = "Kinder"."ID_Mitglied"
left JOIN "KinderMonateEssen" ON "Kinder"."ID_Kinder" = "KinderMonateEssen"."id_Kinder" AND "KinderMonateEssen"."Datum" = {D '2010-07-01' } AND "KinderMonateEssen"."AnzahlEssenKind" > 0

left JOIN "KinderMonateÜMI" ON "Kinder"."ID_Kinder" = "KinderMonateÜMI"."id_Kinder" AND "KinderMonateÜMI"."Datum" = {D '2010-07-01' }

die Datumsabfrage jeweils mit in den left Join


zusätzlich ist das ganz noch etwas komplizierter geworden, weil ich DB NULL noch in eine 0 wandeln musste, da sonst die Addition der Beträge nicht funktionierte.
Letztendlich sieht der ganz SQL-Code so aus (um den Euch nicht vor zu enthalten)/Hoffe, das nützt mal irgend einem anderen Nutzer:
Die Umlaute aus meiner Live-Tabelle habe ich nicht mehr gewandelt.

Code: Alles auswählen

SELECT distinct 
"Mitglieder"."ID_Mitglied",  
"Mitglieder"."KontoName", 
"Mitglieder"."KontoVorname",
"Mitglieder"."Straße",
"Mitglieder"."PLZ",
"Mitglieder"."Ort", 
"Mitglieder"."KontoNr",
"Mitglieder"."KontoBLZ",
"Mitglieder"."KontoKreditinstitut",
"Kinder"."ID_Kinder",
"Kinder"."KindName", 
"Kinder"."KindVorname", 
CASE 
	WHEN "KinderMonateEssen"."AnzahlEssenKind" > 0 
		THEN ("KinderMonateEssen"."AnzahlEssenKind"*3.5) 
		ELSE 0 
	END As "Betrag_Essen",
CASE 
	WHEN "KinderMonateÜMI"."Betrag" > 0 
		THEN "KinderMonateÜMI"."Betrag" 
		ELSE 0 
	END As "Betrag_UEMI",
CASE 
	WHEN "KinderMonateEssen"."AnzahlEssenKind" > 0 
		THEN ("KinderMonateEssen"."AnzahlEssenKind"*3.5) 
		ELSE 0 
	END + 
	CASE 
		WHEN "KinderMonateÜMI"."Betrag" > 0 
			THEN "KinderMonateÜMI"."Betrag" 
			ELSE 0 
		END as "Summe"


FROM "Mitglieder"
INNER JOIN "Kinder" ON "Mitglieder"."ID_Mitglied" = "Kinder"."ID_Mitglied"
left JOIN "KinderMonateEssen" ON "Kinder"."ID_Kinder" = "KinderMonateEssen"."id_Kinder" AND "KinderMonateEssen"."Datum" = {D '2010-07-01' } AND "KinderMonateEssen"."AnzahlEssenKind" > 0

left JOIN "KinderMonateÜMI" ON "Kinder"."ID_Kinder" = "KinderMonateÜMI"."id_Kinder" AND "KinderMonateÜMI"."Datum" = {D '2010-07-01' }


WHERE 
CASE 
	WHEN "KinderMonateEssen"."AnzahlEssenKind" > 0 
		THEN ("KinderMonateEssen"."AnzahlEssenKind"*3.5) 
		ELSE 0 
	END + 
	CASE 
		WHEN "KinderMonateÜMI"."Betrag" > 0 
			THEN "KinderMonateÜMI"."Betrag" 
			ELSE 0 
		END >0

Re: Zusammenfassung von Abfrageergebnissen aus mehreren Tabellen

von MEcki » Do, 12.08.2010 14:08

Ich hatte schon gedacht, folgende - völlig andere Abfrage- wäre die Lösung. Dabei kommt allerdings (auf den Livedaten) zu jedem der Ergebnisse aus dem Join "KinderMonateEssen" ALLE Einträge des entsprechenden Kindes aus "KinderMonateUEMI" enthält.

Code: Alles auswählen

SELECT distinct "Mitglieder"."ID_Mitglied", "Kinder"."ID_Kinder", "Mitglieder"."KontoName", "Mitglieder"."KontoVorname", "Kinder"."KindName", "Kinder"."KindVorname", "KinderMonateEssen"."AnzahlEssenKind", "KinderMonateUEMI"."Betrag"
FROM "Mitglieder"
INNER JOIN "Kinder" ON "Mitglieder"."ID_Mitglied" = "Kinder"."ID_Mitglied"
left JOIN "KinderMonateEssen" ON "Kinder"."ID_Kinder" = "KinderMonateEssen"."id_Kinder"
left JOIN "KinderMonateUEMI" ON "Kinder"."ID_Kinder" = "KinderMonateUEMI"."id_Kinder"
WHERE "KinderMonateEssen"."Datum" = {D '2010-08-01' } OR "KinderMonateUEMI"."Datum" = {D '2010-08-01' }
Kann ich da jetzt evtl. eine JOIN aus "KinderMonateEssen" und eine aus "KinderMOnateUEMI" über ein UNION verbinden, dass wirklich die gewollten Datensätze angezeigt werden?

M_Ecki

Gelöst: Zusammenfass. von Abfrageerg. aus mehreren Tabellen

von MEcki » Mi, 11.08.2010 18:45

Hallo,

ich setzte seit 1 Jahr OOO Base zur Verwaltung eines schulischen Fördervereins ein.
Mitglieder und deren Kinder werden verwaltet sowie die kostenpflichtige Teilnahme der Kinder an der UEMI (Übermittagsbetreuung) sowie eines Mittagessens verwaltet.
UEMI Beiträge wurden bereits eingezogen, Essensrechnungen als Serienbrief bzw. -email generiert.
Ist zwar noch nicht ganz Idiotensicher, weil manuell Hand an Abfragen gelegt werden muss, funktioniert aber soweit ganz gut.

Nach den Sommerferien ändern sich die Abrechnungsmodalitäten, d.h. nicht nur die UEMI Beiträge, sondern auch das Essen wird jetzt eingezogen.

Ich würde gerne pro Kind, oder besser noch Pro Mitglied eine Rechnungsaufstellung machen, die sämtliche fälligen Beträge für den Monat erhält und diese dann per Serienmail versenden. Parallel die fälligen Beiträge einziehen.

Mein eigentliches Problem besteht nun darin, dass ich die SQL-Abfrage zwar dahingehend fertig habe, dass alle fälligen Beträge untereinander in einer Abfrage den jeweiligen Personen zugeordnet erscheinen, ich aber die weitere Zusammenfassung aller Beträge eines Kindes bzw. einer Familie nicht hinbekomme. (Siehe Abfrage UEMI und Essen Aug2010)

Probleme bestehen ggf. auch dadurch, dass z.B. LehrerInnen / BetreuerInnen Essen zahlen müssen, aber natürlich keine Betreuungskosten.

Eine mit Beispieldaten gefüllte DB liegt bei und Abfragen für einen Beispielmonat sind darin enthalten, damit die DB-Struktur klarer wird.

Meine (hoffentlich) bestmögliche Abfrage aktuell:

Code: Alles auswählen

SELECT distinct "Mitglieder"."KontoVorname", "Mitglieder"."KontoName", "Kinder"."KindName", "Kinder"."KindVorname", "KinderMonateUEMI"."Betrag" as "Betrag", "KinderMonateUEMI"."Datum", 'UEMI' as "Art" 
FROM "Kinder", "Mitglieder", "KinderMonateUEMI" 
WHERE "Kinder"."ID_Mitglied" = "Mitglieder"."ID_Mitglied" 
	AND "KinderMonateUEMI"."id_Kinder" = "Kinder"."ID_Kinder" 
	AND "KinderMonateUEMI"."Datum" = {D '2010-08-01' }

union

SELECT distinct "Mitglieder"."KontoVorname", "Mitglieder"."KontoName", "Kinder"."KindName", "Kinder"."KindVorname", "KinderMonateEssen"."AnzahlEssenKind" * 3.5 AS "Betrag", "KinderMonateEssen"."Datum", 'Essen' as "Art"
FROM "KinderMonateEssen", "Kinder", "Mitglieder" 
WHERE "KinderMonateEssen"."id_Kinder" = "Kinder"."ID_Kinder" 
	AND "Kinder"."ID_Mitglied" = "Mitglieder"."ID_Mitglied" 
	AND "KinderMonateEssen"."Datum" = {D '2010-08-01' }

Ist es jetzt irgendwie möglich die Abfrage (Siehe Abfrage UEMI und Essen Aug2010) so zu gestalten, dass das Abfrageergebnis
KontoVorname | KontoName | KindName | KindVorname | BetragEssen | BetragUEMI | Datum

ausgibt.
Dann könnte ich wenigstens pro Kind eine Aufstellung machen. Pro Familie (also wenn eine Familie mehrere Kinder hat) eine Auftellung wäre
die unwichtigere Variante.

Hoffe, es kann mir da jemand helfen.
Besten Dank schon mal
M_Ecki
Dateianhänge
BeispielDB_FGGM.odb
(14.5 KiB) 42-mal heruntergeladen

Nach oben